Unity3D BotW风格角色控制器:角色随相机X轴倾斜问题求助
解决角色随相机X轴旋转前倾的问题
问题核心在于你直接使用cameraTransform.forward生成角色目标旋转时,相机的X轴(上下视角)旋转会让forward向量包含垂直方向分量,导致角色跟着前倾。以下是具体解决方法:
修改旋转逻辑
只提取相机的Y轴旋转角度构建角色目标朝向,完全忽略X轴的旋转影响,同时保留角色Y轴随相机转向的功能:
//custom part if (movementDirection != Vector3.zero) { // 仅保留相机的Y轴旋转,剔除X、Z轴旋转影响 Quaternion cameraYOnlyRotation = Quaternion.Euler(0, cameraTransform.rotation.eulerAngles.y, 0); // 基于相机Y轴旋转生成角色的目标前方向 Vector3 targetForward = cameraYOnlyRotation * Vector3.forward; // 构建目标旋转,强制角色X轴为0,彻底避免前倾 Quaternion toRotation = Quaternion.LookRotation(targetForward, Vector3.up); transform.rotation = Quaternion.RotateTowards(transform.rotation, toRotation, rotationSpeed * Time.deltaTime); }
适配Root Motion的补充说明
由于你使用了Root Motion,需要注意动画控制器的设置:
- 检查动画状态机中的Root Motion Rotation参数,避免动画自身的旋转覆盖代码控制的Y轴转向逻辑
- 若部分动画需要保留Root Motion旋转,可以在代码中根据当前动画状态动态切换是否启用代码旋转,或在动画层中调整旋转权重
之前尝试失效的原因
直接将角色X轴旋转设为0是在RotateTowards插值完成后修改,会和插值后的旋转结果产生冲突,导致Y轴旋转逻辑混乱。正确的做法是从目标旋转的源头就排除X轴的影响,让RotateTowards只处理Y轴的旋转插值。
内容的提问来源于stack exchange,提问作者Domenic
相关产品推荐
相关产品推荐

