如何将Godot中这段2D移动代码转换为3D实现?
2D转3D:move_and_slide 适配实现方法
你的2D代码通过三角函数基于角色旋转生成平面移动方向,转换到3D时核心思路一致,只需适配3D坐标系的方向向量,具体实现如下:
核心逻辑转换
2D中rotation是绕Z轴的角度,对应3D里地面角色通常绕Y轴(垂直向上轴)旋转,移动方向需生成Vector3类型的平面向量(Y轴分量设为0,保持在地面移动)。
实现代码
方法1:手动计算三角函数(对应原2D逻辑)
直接将2D的Y分量替换为Z分量,Y轴设为0:
# 适用于Godot 3/4,KinematicBody3D(或KinematicBody)节点 move_and_slide(Vector3(cos(rotation.y), 0, sin(rotation.y)) * 50, Vector3.UP)
rotation.y是角色绕Y轴的旋转角度Vector3.UP是3Dmove_and_slide的必填参数(指定向上方向,用于处理地面碰撞)
方法2:使用Transform获取方向(更推荐)
手动计算三角函数易因坐标系差异出错,直接用角色的transform.basis获取面向方向更可靠:
# 沿角色正面方向移动(Godot默认Z轴为正面) move_and_slide(transform.basis.z * 50, Vector3.UP) # 若你的模型正面朝向与默认Z轴相反,改用负方向 # move_and_slide(-transform.basis.z * 50, Vector3.UP)
关于你尝试的tangent参数
3D版move_and_slide的tangent是用于自定义滑动方向的可选参数,常规地面移动不需要手动设置,仅在特殊场景(如沿斜面滑动)才需调整,你的问题中无需额外添加该参数。
内容的提问来源于stack exchange,提问作者No-one in particular
相关产品推荐
相关产品推荐

