You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Unity C#中检测数值是否增减?我的代码无法正常运行

如何在Unity中用C#检测数值的增长/下降状态

嘿,我来帮你搞定这个问题!你当前的代码没法正常工作,核心原因是没有正确追踪上一帧的数值——你用的temp变量应该是用来存储上一帧的X位置,但大概率要么没初始化,要么没在每帧更新它的值,导致比较逻辑完全失效。

下面是一套完整的解决方案,以检测transform.position.x的变化为例:

核心思路

要判断数值是增长还是下降,你需要保存上一帧的数值,然后和当前帧的数值做对比,每帧结束后更新这个“上一帧数值”,这样才能持续追踪变化趋势。

完整代码示例

using UnityEngine;

public class PositionChangeDetector : MonoBehaviour
{
    // 存储上一帧的X位置
    private float _lastXPosition;

    void Start()
    {
        // 初始化:第一帧的"上一帧位置"就是当前位置
        _lastXPosition = transform.position.x;
    }

    void Update()
    {
        float currentX = transform.position.x;

        // 判断X位置的变化状态
        if (currentX > _lastXPosition)
        {
            Debug.Log("X坐标正在增长");
            // 在这里添加你需要执行的增长逻辑
        }
        else if (currentX < _lastXPosition)
        {
            Debug.Log("X坐标正在下降");
            // 在这里添加你需要执行的下降逻辑
        }
        else
        {
            Debug.Log("X坐标没有变化");
        }

        // 关键步骤:更新上一帧的位置为当前位置,供下一帧对比
        _lastXPosition = currentX;
    }
}

额外注意事项

  • 物理相关移动的适配:如果你的物体是通过Rigidbody(刚体)移动的,建议把判断逻辑放到FixedUpdate()方法里,因为物理更新是固定时间步长执行的,能避免帧率波动导致的判断误差。
  • 浮点数精度问题:Unity里的位置是浮点数,极小的数值变化可能是浮点数误差导致的,而非真实移动。如果需要忽略微小变化,可以加一个阈值判断:
    float changeThreshold = 0.0001f; // 可根据需求调整阈值大小
    float positionDelta = currentX - _lastXPosition;
    
    if (positionDelta > changeThreshold)
    {
        Debug.Log("X坐标正在增长");
    }
    else if (positionDelta < -changeThreshold)
    {
        Debug.Log("X坐标正在下降");
    }
    else
    {
        Debug.Log("X坐标无有效变化");
    }
    

内容的提问来源于stack exchange,提问作者Lukas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:13:59