Що не так з моєю програмою Respawn?


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
Любіть анімовані скріншоти!
Конерак

1
також відомий як gifs
user1306322

Відповіді:


49

Це, здається, не має нічого спільного з тим, як ви налаштували програму. Що, мабуть, відбувається, що гравець отримує достатньо високе прискорення під час падіння, щоб пролетіти повз землю та опадаючий колайдер. Коли ви переміщуєте позицію під час відновлення, вона все одно буде падати з тією ж швидкістю. У вашому методі Respawn, десь то після очікування лінії, встановіть швидкість назад до нуля: GetComponent<Rigidbody2D>().velocity = Vector2.zero.


2
Ігрові помилки дивовижні xD
Том

11
Більш загально, ви повинні скинути стільки стану персонажа гравця, скільки вам потрібно, крім позиції. Як здоров’я, депутат, боєприпаси тощо. Не забудьте також скинути ворогів ворогів, якщо це така гра.
храповик виродка

@Joe, а як бути з frenemies?
Девід Старкі

8
Пов’язано: Якщо ваша гра не заснована на фізиці, у багатьох платформерів є "максимальна швидкість падіння", щоб забезпечити більш контрольовані падіння (і уникати подібних помилок).
протистояти
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.