Unity 3D 如何检查一个gameobject是否每隔x时间就保持在同一个位置?

问题描述 投票:0回答:1

这是我想出的代码,输出不一致。 我认为这与代码没有正确循环有关。 谁能告诉我,我到底做错了什么?

问题似乎是在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());                                         
}
c# unity3d
1个回答
0
投票

你的代码在检查完对象的位置后,只检查了一次。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它将只执行一次,并将伪并行运行。

© www.soinside.com 2019 - 2024. All rights reserved.