了解对象是否在移动的最简单方法是什么?

时间:2017-04-21 10:48:09

标签: c# unity3d

我想知道,在代码中,让say in update()在对象移动而不是静止时起作用,我想使用资源最少的方法来执行它。请注意,我正在使用Vector3.MoveTwords()函数移动对象。 我为这个问题的模糊性道歉。

3 个答案:

答案 0 :(得分:2)

如果要检测对对象变换(位置,旋转,缩放)所做的任何更改,可以使用变换的hasChanged标志:

using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour
{
    void Update()
    {
        if (transform.hasChanged)
        {
            print("The transform has changed!");
            transform.hasChanged = false;
        }
    }
}

来源https://docs.unity3d.com/ScriptReference/Transform-hasChanged.html

答案 1 :(得分:1)

如果对象具有RigidBody组件,则可以检查

RigidBody.velocity == Vector3.zero

否则,您可以每帧保存一个Vector3位置,并将其与当前位置匹配,如下所示

Vector3 prevPos;
public void update(){
    if(prevPos == transform.position){
        Debug.Log("Object Moving");
    }
    prevPos = transform.position;
}

答案 2 :(得分:1)

如果您使用RigidBody

,可能需要查看IsSleeping
Rigidbody.IsSleeping()

From the Unity Manual:

  

当刚体移动速度低于规定的最小线性或转速时,物理引擎认为它已经停止。发生这种情况时,GameObject在收到碰撞或强制之前不会再次移动,因此将其设置为“休眠”模式。