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

Godot中如何让玩家朝向自身移动方向旋转?

代码失效核心原因

你编写的逻辑存在明显的逻辑冲突:每次调用rotate_object_local()完成旋转计算后,立刻执行了transform.basis = Basis(),无参构造的Basis代表世界坐标系下无旋转的初始姿态,这行代码会直接覆盖你刚才的旋转结果,所以看起来没有任何效果。

除此之外你的现有实现还存在几个不符合需求的问题:

  • rotate_object_local第三个参数为旋转弧度值,你设置的1弧度约等于57度,若在帧循环中执行会导致旋转速度过快,需要乘以帧间隔delta实现帧率无关的计算
  • 分按键单独判断旋转的逻辑冗余,无法适配斜向移动等多按键同时触发的场景
  • 绕Vector3.LEFT轴旋转会导致物体上下俯仰,不符合常规3D角色沿水平方向朝向移动方向的需求
修复后的实现方案

推荐直接根据输入向量对齐朝向,逻辑更简洁也更容易扩展,可直接放在_physics_process回调中执行:

# 收集输入方向
var input_dir = Vector3.ZERO
input_dir.z = Input.get_action_strength("move_backward") - Input.get_action_strength("move_forward")
input_dir.x = Input.get_action_strength("move_right") - Input.get_action_strength("move_left")
input_dir = input_dir.normalized()

# 有有效输入时更新朝向
if input_dir.length_squared() > 0:
    # 直接对齐到移动方向,Y轴保持向上
    transform.basis = Basis.looking_at(input_dir, Vector3.UP)
    
    # 若需要平滑旋转效果可替换为下面的代码,10为旋转速度系数,数值越大旋转越快
    # transform.basis = transform.basis.slerp(Basis.looking_at(input_dir, Vector3.UP), 10 * delta)

如果你的项目是2D的,需要调整为使用rotation属性适配2D坐标系的计算逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 17:15:07