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

如何限制AI仅沿Z轴移动?冻结刚体后仍存在异常问题

解决AI仅沿Z轴移动的问题

1. 修正移动逻辑,避免随玩家跳跃上移

问题出在followPlayer方法中直接使用了玩家的完整位置,导致AI会跟随玩家的Y轴(跳跃)和X轴移动。需要固定AI自身的X、Y坐标,仅沿Z轴趋近玩家:

void followPlayer()
{
    // 固定AI的X、Y坐标,仅使用玩家的Z轴位置作为目标
    Vector3 targetPos = new Vector3(transform.position.x, transform.position.y, target.position.z);
    Vector3 pos = Vector3.MoveTowards(transform.position, targetPos, speed * Time.deltaTime);
    rig.MovePosition(pos);
}

2. 修正旋转逻辑,消除不必要的转向

代码中Update方法的旋转逻辑会根据玩家的全方向位置计算转向,即使冻结了Rigidbody旋转,代码仍会强制修改旋转。可以通过两种方式解决:

方式一:完全禁止AI旋转

直接删除Update中的旋转相关代码,同时确保在Inspector面板的Rigidbody组件中勾选Freeze Rotation的X、Y、Z选项,彻底锁定旋转。

方式二:仅允许沿Z轴方向的朝向(若需要AI看向玩家Z轴方向)

修改相对位置计算,只保留Z轴分量,避免X、Y轴带来的转向:

private void Update()
{
    StopFollowing();

    // 仅计算Z轴方向的相对位移,消除X/Y轴对旋转的影响
    Vector3 relativePos = new Vector3(0, 0, target.position.z - transform.position.z);
    // 当Z轴距离过近时跳过旋转,避免计算错误
    if (relativePos.magnitude < 0.01f) return;

    Quaternion rotation = Quaternion.LookRotation(relativePos);
    Quaternion current = transform.localRotation;
    transform.localRotation = Quaternion.Slerp(current, rotation, Time.deltaTime * LookSpeed);
}

额外检查

确保Rigidbody组件的Freeze Position选项中,X和Y轴处于勾选状态,双重保证AI不会偏离Z轴移动。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 04:06:36