Respawn Coroutine에 어떤 문제가 있습니까?


19

플레이어가 기본 / 지상에서 떨어지면 가장 가까운 체크 포인트에서 플레이어가 부활하기를 원하는 2D Platformer 게임을 만들고 있습니다. 그러나 나는 플레이어가 땅에서 떨어지고 부활하는 사이에 지연이 있기를 원합니다. 이 목표를 달성하기 위해 내 코드 섹션입니다.

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

답변:


49

이것은 코 루틴을 설정하는 방법과 관련이없는 것 같습니다. 아마도 일어나고있는 것은 플레이어가 땅과 폴 아웃 콜 라이더를 지나치면서 떨어지면서 충분히 높은 가속을 얻는다는 것입니다. 다시 생성하는 동안 위치를 이동해도 여전히 같은 속도로 떨어집니다. Respawn 방법에서 대기 라인 이후 언젠가 속도를 다시 0으로 설정하십시오 GetComponent<Rigidbody2D>().velocity = Vector2.zero.


2
게임 버그는 굉장한 xD
Tom

11
보다 일반적으로 위치 외에 필요한만큼 플레이어 캐릭터의 상태를 재설정해야합니다. 체력, MP, 탄약 등과 같이 적의 게임을 초기화하는 것을 잊지 마십시오.
ratchet freak

@ 조하지만 열광은 어떻습니까?
David Starkey

8
게임이 물리 기반이 아닌 이상, 많은 플랫 포머는 "최대 낙하 속도"를 사용하여보다 통제 된 낙하를 허용합니다 (이와 같은 버그는 피함).
무시
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.