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

Godot游戏开发中如何定义存储旋转角度的变量实现角色倾斜

核心问题说明

你当前代码有两个直接影响功能的错误:

  • 错误修改了transform.origin属性:这个属性存储的是节点的本地空间位置坐标,和旋转完全无关,修改它只会让上半身节点位置偏移,不会产生倾斜效果。
  • 逻辑顺序冲突:原代码先后写了两次独立的插值判断,右倾的插值结果会被后续的左倾判断分支覆盖,导致右倾操作完全失效。
旋转角度的正确存储类型

你用Vector3存储欧拉角旋转值的方式是完全正确的,Godot中旋转相关的常用类型对应场景如下:

  • 配置固定旋转角度(比如你导出的默认角度、倾斜角度):用Vector3即可,三个分量分别对应X/Y/Z三个轴的旋转数值,直接在Inspector面板调整分量值非常方便。
  • 运行时修改节点旋转:Spatial节点自带rotation属性,类型就是Vector3,存储本地空间下的欧拉角旋转值,直接对这个属性做插值就能实现平滑倾斜效果。
  • 复杂空间变换计算:如果后续要做骨骼IK、多节点空间联动这类复杂逻辑,可以用Basis类型存储旋转矩阵,简单的左右倾斜功能不需要用到。
修正后的可用代码
extends Spatial

const LEAN_LERP = 5
# 初始值可以根据你的需求在Inspector面板调整
export var default_degrees : Vector3 = Vector3.ZERO
export var leaning_degrees : Vector3 = Vector3(0.6, 0, 0)

func _process(delta):
    # 先计算当前输入对应的目标旋转值,避免逻辑覆盖
    var target_rotation = default_degrees
    if Input.is_action_pressed("LeanRight"):
        target_rotation = leaning_degrees
    if Input.is_action_pressed("LeanLeft"):
        target_rotation = -leaning_degrees
    
    # 对旋转属性做插值,不要修改position/origin相关属性
    rotation = rotation.linear_interpolate(target_rotation, LEAN_LERP * delta)

补充提示:如果运行后发现倾斜幅度过小,注意核对引擎版本的单位差异:Godot 3中rotation属性单位为角度,Godot 4中对应Node3D节点的rotation属性单位为弧度,0.6弧度约等于34度,如果你用Godot 4且觉得倾斜幅度不对,可以按这个换算关系调整leaning_degrees的数值到你觉得手感合适的程度即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 18:36:23