我的目标是在平台登陆时让平台销毁。登陆平台也会让我反感(这是一个无尽的跳投)。
问题是层的破坏是不一致的。有时弹跳和摧毁按预期工作,有时平台不会被摧毁(如果我再次弹回它会破坏),有时平台会摧毁并且弹跳不会启动。我不确定如何让它每次都能正常工作以及为什么它不能正常工作。
这是我用于反弹的代码:
public bool platformTouch; //true or false if you are grounded
public Transform groundCheck; //Object which will check if we are grounded
public bool groundedTouch;
public LayerMask ground; //Decide which layers count as grounded.
float groundRadius = .2f; //Radius around ground check object will check if grounded
public LayerMask platform; //Decide which layers count as grounded.
public Rigidbody2D Player;
void FixedUpdate()
{
platformTouch = Physics2D.OverlapCircle(groundCheck.position, groundRadius, platform);
groundedTouch = Physics2D.OverlapCircle(groundCheck.position, groundRadius, ground);
}
这是我正在使用的破坏代码。如果玩家的速度小于0(下降),它应该触发破坏。摧毁也有延迟,因此弹跳会触发。
public Rigidbody2D Player;
void Update()
{
Player = GameObject.FindGameObjectWithTag("Player").GetComponent<Rigidbody2D>();
}
void OnTriggerEnter2D(Collider2D collider)
{
if (collider.gameObject.tag == "Destroyer")
{
if (Player.velocity.y <= 0)
{
StartCoroutine(DestroyPlatforms());
}
}
}
IEnumerator DestroyPlatforms()
{
yield return new WaitForSeconds(.1f); //waits .1 seconds
Destroy(gameObject); //this will work after .1 seconds.
//play sound
}
答案 0 :(得分:2)
我建议你在平台上增加你的对撞机并使用OnTriggerExit和Destroy(这个,0.1),再次我可能是错的。但是,它会有所帮助
答案 1 :(得分:1)
物理引擎不是确定性的,并且让2个对象检查相同的碰撞通常不是一个好习惯(一个对象可以触发而不是另一个对象在同一帧中)我认为这样做这里的问题。
碰撞只能由平台处理,并在调用StartCoroutine(DestroyPlatforms())之前在OnTriggerEnter2D上的播放器上调用bounce方法;