функция единого запуска из сопрограммы - PullRequest
0 голосов
/ 02 февраля 2019

Привет, почему эта работа не работает? Я пытаюсь повернуть игровой объект из cororotine, который запускает функция, но не rotate, если я добавляю rotate в обновление, оно работает нормально, я запутался, спасибо за любую помощь

       using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class waitthendosomthing : MonoBehaviour
{
    public bool beingHandled = true; //  bool
    void Update()
    {
        //transform.Rotate(6, 0, 0);// this runs 
        if (beingHandled == true )
        {
            StartCoroutine(HandleIt());// run function
        }

    }

    void rotateit()
    {
        transform.Rotate(6, 0, 0);// this dosnt run
        print("running this function");
    }

    IEnumerator HandleIt()
    {
            beingHandled = false;
            print("BeingHandled is off");
            rotateit();
            //transform.Rotate(6, 0, 0); // or this
            yield return new WaitForSeconds(3.1f);
            //transform.Rotate(0, 0, 0); // or this
            yield return new WaitForSeconds(3.1f);
            beingHandled = true;
            print("BeingHandled is on");
    }
}

1 Ответ

0 голосов
/ 02 февраля 2019

Причина, по которой это работает при обновлении, заключается в том, что обновление вызывается для каждого кадра.Таким образом, каждый кадр куб будет вращаться на 6 градусов и непрерывно вращаться, как и ожидалось

Совместная процедура выполняет поворот только дважды, один раз на 6 градусов и через 3,1 секунды обратно на 0 градусов.

Если вы хотите вращаться в совместной программе, вам придется реализовать ее по-другому:

, например:

        double time = 0.0f;

        while (time < 3.1f)
        {
            time += Time.deltaTime;
            rotateit();
            yield return null;
        }

Это будет вращать куб непрерывно в течение 3,1 секунды.а потом остановись.

...