我想知道,在代码中,让say in update()
在对象移动而不是静止时起作用,我想使用资源最少的方法来执行它。请注意,我正在使用Vector3.MoveTwords()
函数移动对象。
我为这个问题的模糊性道歉。
答案 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()
当刚体移动速度低于规定的最小线性或转速时,物理引擎认为它已经停止。发生这种情况时,GameObject在收到碰撞或强制之前不会再次移动,因此将其设置为“休眠”模式。