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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 12:35:01