如何使用C#检测Unity中的值是否在增加?
例如,如果我的Position.x
值正在上升或下降。
if(transform.position.x < temp.transform.position.x){
...
}
那不起作用。
答案 0 :(得分:2)
获取x轴值并将其存储在变量中。如果每个帧都发生变化,请检查Update
函数,然后更新该变量。如果它改变了,也要更新该变量。
float lastXVal;
void Start()
{
lastXVal = transform.position.x;
}
// Use this for initialization
void Update()
{
if (transform.position.x < lastXVal)
{
Debug.Log("Decreased!");
//Update lastXVal
lastXVal = transform.position.x;
}
else if (transform.position.x > lastXVal)
{
Debug.Log("Increased");
//Update lastXVal
lastXVal = transform.position.x;
}
}
如果必须对许多Object实例执行此操作,或者还检查更多轴,它们的旋转和缩放,请将代码放在transform.hasChanged
中。这会改善效果,因为它会在transform.hasChanged
为true
时执行所有检查。
void Update()
{
if (transform.hasChanged)
{
if (transform.position.x < lastXVal)
{
Debug.Log("Decreased!");
//Update lastXVal
lastXVal = transform.position.x;
}
else if (transform.position.x > lastXVal)
{
Debug.Log("Increased");
//Update lastXVal
lastXVal = transform.position.x;
}
transform.hasChanged = false;
}
}
答案 1 :(得分:0)
您可以使用InvokeRepeating
创建一个方法并在每X秒调用一次,然后在检查后将新值设置为保存最后位置的变量,检查新位置是否低于或高于其先前值。
float lastpos;
void Start()
{
lastpos = transform.position.x;
InvokeRepeating("checkPos", 0.01, 2.0);
}
void checkPos(){
if(transform.position.x < lastpos){
//decreasing
}
else if(transform.position.x > lastpos){
//increasing
}
else {
//stayed the same
}
lastpos = transform.position.x;
}