调用StartCoroutine()无效

时间:2017-07-23 09:49:43

标签: c# unity3d game-engine unityscript coroutine

我有一个Sphere预制件,它只是附有MoveSphere脚本的球体。它有Rotate()方法启动协同程序。 Rotate()方法使球体沿圆轨迹移动。问题是当我在MoveSphere脚本的Rotate()方法中调用Start()方法时,它工作正常,但是当我尝试在GameController脚本的Start方法中调用它时 - 它不起作用(球体保持不变)在同一个地方)。这是我的MoveSphere和GameController脚本的代码:

public class MoveSphere : MonoBehaviour
{
    // ...some fields

    void Start()
    {
        rb = GetComponent<Rigidbody>();

        // if i uncomment next line of code - it works fine
        // Rotate();
    }

    public void Rotate()
    {
        StartCoroutine(rotate());
    }

    void Update() { }

    public IEnumerator rotate()
    {
        int n = (int)(360 / dAngle);
        float da = 360f / n;
        vAmp = radius * da * Mathf.Deg2Rad / dt;
        currentAngle = 0;
        for (int i = 0; i < n; i++)
        {
            Vector3 pos = getPosition(currentAngle);
            currentAngle += da;
            rb.position = pos;
            yield return new WaitForSeconds(dt);
        }
    }

    //...some mathematical methods
}
public class GameController : MonoBehaviour
{
    public GameObject obj;
    public int numOfInstances;

    // Use this for initialization
    void Start ()
    {
        GameObject sphere1 = Instantiate(obj, new Vector3(-5,0,-2), Quaternion.identity);

        // this one doesn't work
        sphere1.GetComponent<MoveSphere>().Rotate();
    }

    void Update () { }
}

1 个答案:

答案 0 :(得分:0)

我不知道发生了什么,但我注意到如果我在调用者脚本的Update()方法中调用它 - 它可以工作!!!。