如何修改第三人称角色移动 实现侧移不转向(类似PUBG/Control)
第三人称侧移不转向的实现方案
- 核心思路:区分前后移动和左右侧移逻辑,仅在前后移动时让角色转向移动方向,左右移动时保持当前朝向,只执行横向位移。
替换你提供的stateMachine.transform.rotation = Quaternion.LookRotation(movement);代码片段,修改为以下逻辑:
// 获取角色水平前向(忽略Y轴,避免地形坡度干扰转向) Vector3 forward = stateMachine.transform.forward; forward.y = 0; forward.Normalize(); // 获取角色水平右向 Vector3 right = stateMachine.transform.right; right.y = 0; right.Normalize(); // 拆分移动输入为前后、左右分量 float forwardAxis = Vector3.Dot(movement.normalized, forward); float rightAxis = Vector3.Dot(movement.normalized, right); // 仅当存在有效前后输入时,才让角色转向前后移动方向 if (Mathf.Abs(forwardAxis) > 0.1f) { Vector3 targetForward = forwardAxis * forward; stateMachine.transform.rotation = Quaternion.LookRotation(targetForward); } // 构建最终移动向量,给左右侧移添加减速系数实现缓慢效果 Vector3 finalMovement = forwardAxis * forward + rightAxis * right; finalMovement *= rightAxis != 0 ? 0.7f : 1f;
- 关键细节:
- 忽略Y轴的方向计算,避免角色因上下坡出现不必要的俯仰旋转
- 用向量点积精准拆分输入意图,区分前后/左右移动
- 给左右移动设置速度系数(如示例中的0.7f),实现你需要的缓慢侧移效果
- 设置输入阈值(0.1f),避免微小输入导致的角色转向抖动
内容的提问来源于stack exchange,提问作者Khatai Suleymanli
相关产品推荐
相关产品推荐

