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

Godot中实现角色沿视角方向移动遇异常,求技术解决

Godot角色沿相机视线方向移动问题修复

你的代码存在几个核心问题,导致角色移动异常:

  1. 无效的方向向量:direction初始化为空Vector3(),后续的旋转操作无法生成有效的移动方向,导致move_toward行为错乱。
  2. 错误的移动方式:直接修改position会绕过CharacterBody3D的物理系统,且move_and_slide()依赖velocity属性生效,原代码中的调用完全无效。
  3. 未正确获取相机视线方向:没有基于相机朝向计算移动方向,也未限制移动在水平面上,导致出现非预期的上下移动。

修正后的代码(适配你的场景结构)

假设你的场景树是CharacterBody3D作为根节点,下方挂载Node3D(相机旋转支点),Node3D下是Camera3D:

extends CharacterBody3D

@export var speed: float = 5.0
@export var camera_pivot: Node3D  # 在编辑器中将场景中的Node3D拖拽到这里

func _physics_process(delta: float):
    # 获取前后方向的输入值(对应你设置的"forward"/"backward"输入映射)
    var forward_input = Input.get_axis("backward", "forward")
    
    # 获取相机的全局前向向量:Godot默认相机前向为-Z方向,所以取basis.z的反向
    var camera_forward = camera_pivot.global_transform.basis.z * -1
    # 移除Y轴分量,确保角色仅在水平面上移动
    camera_forward.y = 0.0
    # 归一化向量,避免斜向移动速度异常
    camera_forward = camera_forward.normalized()
    
    # 计算最终移动方向并设置速度
    velocity = camera_forward * forward_input * speed
    
    # 执行物理移动
    move_and_slide()

关键说明

  • 相机方向获取:通过camera_pivot的全局变换获取前向,确保方向随相机旋转同步更新。
  • 水平移动限制:将camera_forward的Y分量设为0,彻底解决角色上下偏移的问题。
  • 正确的物理移动:依赖CharacterBody3D的velocity属性和move_and_slide(),既保证物理碰撞生效,又符合引擎的移动逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 14:02:49