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

武器换弹动画开发问题:弹匣X轴旋转时_x值陷入89-90循环

问题分析与解决方案

你的代码核心问题有两个:

  • 浮点精度误差:_x是浮点数值,用== 0判断几乎永远不会触发,导致flag一旦变为true后无法重置,后续逻辑混乱。
  • 边界值处理缺失:当_x超过90后开始递减,但没有限制最小值,也没有在到达目标值时锁定,导致数值在边界附近来回跳动。

修改后的代码如下:

bool flag = false;

// 旋转到90度的逻辑
if (!flag)
{
    _x += reloadingSpeed;
    // 到达90度时锁定值并切换状态
    if (_x >= 90)
    {
        _x = 90;
        flag = true;
    }
}
// 复位到0度的逻辑
else
{
    _x -= reloadingSpeed;
    // 到达0度时锁定值并切换状态
    if (_x <= 0)
    {
        _x = 0;
        flag = false;
    }
}

magazine.localRotation = Quaternion.Euler(_x, magazine.localRotation.y, magazine.localRotation.z);

关键修改点:

  • 把状态判断和数值更新逻辑合并,避免独立if语句导致的逻辑冲突。
  • 到达目标值(90或0)时,直接将_x强制设为目标值,彻底避免浮点精度带来的边界跳动问题。
  • 用<= 0替代== 0,确保复位逻辑能稳定触发。

这样修改后,弹匣会平滑旋转到90度,之后再平滑复位到初始状态,不会出现数值卡在边界循环的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 06:31:08