我的Respawn协程​​怎么了?


19

我正在创建一个2D平台游戏,其中如果玩家掉落地面/地面,那么我希望玩家在最近的检查站重生。但是我希望玩家从地面掉落和重生之间存在延迟。这是我的代码中实现此目标的部分:

private void OnTriggerEnter2D(Collider2D collision)
{
    Debug.Log(collision.tag);
    if (collision.tag.Equals("Kill")) 
    {
        StartCoroutine("Respawn");
    }
    else if(collision.tag.Equals("Checkpoint"))
    {

        Animator flag = collision.GetComponent<Animator>();
        if (!flag.GetBool("hasCrossed"))
        {
            flagCounter++;
            flag.SetBool("hasCrossed", true);
            checkpoint = collision.gameObject.transform.position;
        }
    }
}

IEnumerator Respawn()
{
    yield return new WaitForSeconds(respawnDelay);
    transform.position = checkpoint;

}

对于较小的重生延迟(例如1或2秒),此方法效果很好。但是在将延迟增加到5秒后,出现在最近的检查站之后的玩家会立即消失,然后经过多次重复后,玩家会重新出现。

这是2秒的延时 这是2秒的时间延迟

这是5秒的延时 这是5秒的时间延迟

我怎样才能解决这个问题?


3
喜欢动画截图!
Konerak

1
也称为gifs
user1306322

Answers:


49

这似乎与如何设置协程无关。可能发生的情况是,玩家在跌倒时会出现足够高的加速度,从而越过地面和辐射对撞机。在重生期间移动位置时,它仍将以相同的速度下降。在Respawn方法中,在等待线之后的某个时间,将速度设置回零:GetComponent<Rigidbody2D>().velocity = Vector2.zero


2
游戏错误很棒xD
Tom

11
一般而言,除了位置以外,您还应该根据需要重置玩家角色的状态。像健康,MP,弹药等。如果是那样的游戏,别忘了重置敌人。
棘轮怪胎

@Joe,但仇敌呢?
大卫·斯塔基

8
相关内容:除非您的游戏是基于物理学的游戏,否则许多平台游戏开发者都具有“最大跌落速度”以允许更好地控制跌倒(并避免此类错误)。
违抗
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.