我有一个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 () { }
}
答案 0 :(得分:0)
我不知道发生了什么,但我注意到如果我在调用者脚本的Update()方法中调用它 - 它可以工作!!!。