如何检测值是否增加?

时间:2018-05-20 19:48:41

标签: c# unity3d

如何使用C#检测Unity中的值是否在增加? 例如,如果我的Position.x值正在上升或下降。

if(transform.position.x < temp.transform.position.x){
    ...
}

那不起作用。

2 个答案:

答案 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.hasChangedtrue时执行所有检查。

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;
}