这是我想出的代码,输出不一致。 我认为这与代码没有正确循环有关。 谁能告诉我,我到底做错了什么?
问题似乎是在X秒过后,它将继续检查位置,而不等待时间的推移。
IEnumerator checkPosition()
{
while (true)
{
yield return new WaitForSeconds(X);
newpos = this.gameObject.transform.position;
//Debug.Log(newpos);
if (oldpos == newpos)
{
Debug.Log("Player remained idle");
}else if (oldpos != newpos)
{
Debug.Log("Player moved");
}
oldpos = newpos;
}
}
void Start()
{
oldpos = this.gameObject.transform.position;
}
void Update()
{
StartCoroutine(checkPosition());
}
你的代码在检查完对象的位置后,只检查了一次。X
的时间量。你需要循环你的检查程序。
IEnumerator checkPosition()
{
while (true)
{
yield return new WaitForSeconds(X);
newpos = this.gameObject.transform.position;
//Debug.Log(newpos);
if (oldpos == newpos)
{
Debug.Log("Player remained idle");
}else if (oldpos != newpos)
{
Debug.Log("Player moved");
}
oldpos = newpos;
}
}
更新:你需要在你的coroutine中开始使用 Start
. 该 Update
方法在每一帧中执行。所以,你启动coroutine时,无需等待 X
的时间量。当你开始你的coroutine在 Start
它将只执行一次,并将伪并行运行。