当我在团结中反弹时,如何让平台消失?

时间:2016-04-02 03:46:12

标签: unity3d

我的目标是在平台登陆时让平台销毁。登陆平台也会让我反感(这是一个无尽的跳投)。

问题是层的破坏是不一致的。有时弹跳和摧毁按预期工作,有时平台不会被摧毁(如果我再次弹回它会破坏),有时平台会摧毁并且弹跳不会启动。我不确定如何让它每次都能正常工作以及为什么它不能正常工作。

这是我用于反弹的代码:

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

}

2 个答案:

答案 0 :(得分:2)

我建议你在平台上增加你的对撞机并使用OnTriggerExit和Destroy(这个,0.1),再次我可能是错的。但是,它会有所帮助

答案 1 :(得分:1)

物理引擎不是确定性的,并且让2个对象检查相同的碰撞通常不是一个好习惯(一个对象可以触发而不是另一个对象在同一帧中)我认为这样做这里的问题。

碰撞只能由平台处理,并在调用StartCoroutine(DestroyPlatforms())之前在OnTriggerEnter2D上的播放器上调用bounce方法;