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

Unity中角色头部朝向倾斜时如何实现水平向前移动避免穿地形

问题原因

你当前使用的Transform.Translate默认基于局部坐标系计算移动方向,当角色面部朝下(绕X轴产生俯仰角度)时,局部坐标系的Z轴正方向会同步向下倾斜,就会出现向下移动穿地形的问题。另外原代码中硬编码除以50的写法不推荐,建议用Time.deltaTime适配不同设备的帧率差异,避免不同设备上移动速度不一致。

解决方案

我们只需要提取角色朝向的水平分量作为移动方向即可,完全忽略俯仰角度对移动方向的影响,实现代码如下:

float speed = 40;
// 提取角色自身朝向
Vector3 forwardDir = transform.forward;
// 清空Y轴分量,保证方向完全水平
forwardDir.y = 0;
// 归一化处理,避免俯仰角度变化导致移动速度波动
forwardDir.Normalize();
// 基于世界坐标系移动,第二个参数指定Space.World表示移动向量是世界空间下的
transform.Translate(forwardDir * speed * Time.deltaTime, Space.World);

额外优化建议

  • 如果你的角色挂载了Rigidbody刚体组件,建议改用刚体的移动方法避免穿模,示例:
// 写在FixedUpdate生命周期中
rigidbody.MovePosition(transform.position + forwardDir * speed * Time.fixedDeltaTime);
  • 如果用CharacterController角色控制器组件,直接调用Move方法即可:
characterController.Move(forwardDir * speed * Time.deltaTime);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 18:36:09