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

如何仅检测transform的y轴旋转是否发生变化

实现方案

核心实现逻辑是缓存上一帧的Y轴旋转值,每一帧和当前值做差值对比,仅当差值超过阈值时触发自定义操作,同时兼容浮点运算误差场景。

完整代码示例

using UnityEngine;

public class RotationYMonitor : MonoBehaviour
{
    // 存储上一帧的Y轴旋转值
    private float _prevRotationY;
    // 旋转变化检测阈值,可根据需求调整,Mathf.Epsilon为Unity默认极小浮点阈值
    private const float ROTATION_CHECK_THRESHOLD = Mathf.Epsilon;

    private void Start()
    {
        // 初始化缓存值为物体初始Y轴旋转值
        _prevRotationY = transform.eulerAngles.y;
    }

    private void Update()
    {
        float currentRotationY = transform.eulerAngles.y;
        // 对比当前帧与上一帧的Y轴旋转差值
        if (Mathf.Abs(currentRotationY - _prevRotationY) > ROTATION_CHECK_THRESHOLD)
        {
            // 此处执行你的自定义逻辑
            OnRotationYChanged(currentRotationY);
            
            // 更新缓存值为当前帧旋转值,供下一帧对比使用
            _prevRotationY = currentRotationY;
        }
    }

    /// <summary>
    /// Y轴旋转变化触发的自定义方法
    /// </summary>
    /// <param name="newRotationY">变化后的Y轴旋转值</param>
    private void OnRotationYChanged(float newRotationY)
    {
        // 示例逻辑,可替换为你自己的业务代码
        Debug.Log($"Y轴旋转已变化,当前值:{newRotationY}");
    }
}

注意事项

  • 若需要检测本地坐标系下的Y轴旋转而非世界坐标系,将transform.eulerAngles.y替换为transform.localEulerAngles.y即可
  • 不要直接使用transform.rotation.y做对比,四元数的y分量和欧拉角的Y轴旋转定义完全不同,直接对比会出现逻辑错误
  • 若需要过滤微小的旋转抖动,可以将ROTATION_CHECK_THRESHOLD阈值调大,比如设置为0.1f,只有旋转变化超过0.1度才会触发操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 02:06:05