Есть ли лучший способ WaitForSeconds? - PullRequest
1 голос
/ 18 февраля 2020

Я новичок в c# программировании, но я следовал документации, чтобы вставить ожидание в мой код. Проблема в том, что это не работает. Вот код:

void Start()
{
    StartCoroutine(Fixed());
}

IEnumerator Fixed()
{
    print("fixed clone");
    yield return new WaitForSeconds(5);

    Vector3 originalPosition = new Vector3(Random.Range(-5f, 5f), Random.Range(-2, 2), 100);
    Rigidbody clone = Instantiate(original, originalPosition, transform.rotation);
    clone.velocity = rb.velocity * speed;
}

(Это всего лишь фрагмент кода.) В Unity, когда я играю, клоны вылетают, и с каждым клоном появляется сообщение «исправленный клон» в моей консоли. Я знаю, что это идет отсюда.

Если вам нужен весь код для определения проблемы, я также могу вставить это.

1 Ответ

0 голосов
/ 18 февраля 2020

Глядя на свой код, вы просто хотите порождать объект после задержки. Вам не нужен сопрограмма, чтобы сделать это. Сопрограммы хороши для манипулирования объектами в течение нескольких кадров или покадрово.

Чтобы просто запустить функцию после задержки, попробуйте метод Invoke :

void Start()
{
    Invoke("SpawnClone", 5.0f); //Call SpawnClone 5 seconds after start
}

void SpawnClone()
{
    print("fixed clone");

    Vector3 originalPosition = new Vector3(Random.Range(-5f, 5f), Random.Range(-2, 2), 100);

    Rigidbody clone;
    clone = Instantiate(original, originalPosition, transform.rotation);
    clone.velocity = rb.velocity * speed;
}

ИЛИ Попробуйте запустить как сопрограмму

private IEnumerator coroutine;
void Start()
{
    coroutine = SpawnClone(5.0f);
    StartCoroutine(coroutine); //Trigger SpawnClone coroutine and pass in the delay of 5 seconds
    print("Triggered Coroutine SpawnClone");
}

private IEnumerator SpawnClone(float delay)
{
    print("Coroutine tick");
    yield return new WaitForSeconds(delay);

    print("Coroutine logic stared: " + Time.time + " seconds");

    Vector3 originalPosition = new Vector3(Random.Range(-5f, 5f), Random.Range(-2, 2), 100);
    Rigidbody clone;
    clone = Instantiate(original, originalPosition, transform.rotation);
    clone.velocity = rb.velocity * speed;   

    print("Coroutine ended: " + Time.time + " seconds");     
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...