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

在Godot中如何实现平滑旋转?使用lerp_angle后角色几乎不动怎么解决

问题核心原因
  • 单位不匹配:lerp_angle、atan2函数返回值为弧度单位,但你将其直接赋值给rotation_degrees.y,该属性接收的是角度单位,数值差了近57倍,导致角色旋转速度极慢,看起来就像无法移动。
  • 代码逻辑冗余:重复的方向判断和插值代码,后续维护容易出错。
可行解决方案

方案1:改用弧度属性rotation.y处理旋转(更推荐,Godot内部运算默认用弧度,性能更好)

直接把所有赋值目标从rotation_degrees.y改成rotation.y即可,下面是优化后的完整代码:

# 先统一计算输入向量,避免冗余分支
var input = Vector3.ZERO
if Input.is_action_pressed("move_forward"): input.z += 1
if Input.is_action_pressed("move_backward"): input.z -= 1
if Input.is_action_pressed("move_left"): input.x += 1
if Input.is_action_pressed("move_right"): input.x -= 1

# 有输入的时候才处理旋转
if input.length_squared() > 0:
    # 归一化输入保证斜向移动速度和单方向一致
    input = input.normalized()
    # 直接用弧度属性rotation.y做插值
    rotation.y = lerp_angle(rotation.y, atan2(input.z, -input.x), delta * 7)

方案2:保持用rotation_degrees.y,转换弧度为角度

如果你习惯用角度单位处理,就把插值的目标值用rad_to_deg()转换:

rotation_degrees.y = lerp_angle(rotation_degrees.y, rad_to_deg(atan2(input.z, -input.x)), delta * 7)
额外优化建议
  • 可以调整delta * 7里的系数,数值越大旋转速度越快,按需调整即可
  • 输入向量记得归一化,避免斜向移动时速度比单方向快的问题

内容的提问来源于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 18:45:08