如何让Godot4第三人称摄像机避免向上拖动鼠标时翻转
解决Godot4第三人称摄像机翻转问题
你的问题核心是未限制垂直方向的旋转角度,直接用rotate_x累加旋转会让摄像机绕X轴翻转超过90度,最终出现视角颠倒的情况。要修复这个问题,你需要记录垂直旋转的当前角度,并将其限制在合理范围内(比如上下各80度左右),直接控制旋转值而非累加旋转操作。
修改后的完整代码
extends RigidBody3D @onready var horizontal_pivit = $HorizontalPivit @onready var vertical_pivit = $HorizontalPivit/VerticalPivit var mouse_sensitivity := 0.001 # 记录垂直方向的当前旋转角度 var vertical_rotation := 0.0 # 定义垂直旋转的上下限(弧度值,对应上下80度左右) const VERTICAL_MIN = -1.396 const VERTICAL_MAX = 1.396 func _ready() -> void: Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED) func _process(delta) -> void: var input := Vector3.ZERO input.x = Input.get_axis("left", "right") input.z = Input.get_axis("forward", "backward") apply_central_force(input * 1200.0 * delta) # 水平旋转无限制,直接累加即可 horizontal_pivit.rotate_y(-Input.get_axis("look_left", "look_right") * mouse_sensitivity) # 直接设置垂直旋转角度(已限制范围) vertical_pivit.rotation.x = vertical_rotation func _unhandled_input(event: InputEvent) -> void: if event is InputEventMouseMotion and Input.get_mouse_mode() == Input.MOUSE_MODE_CAPTURED: # 计算垂直旋转的增量 var vertical_delta = -event.relative.y * mouse_sensitivity # 更新当前垂直旋转角度,并限制在上下限之间 vertical_rotation = clamp(vertical_rotation + vertical_delta, VERTICAL_MIN, VERTICAL_MAX)
关键修改说明
- 新增旋转控制变量:用
vertical_rotation存储当前垂直旋转角度,通过VERTICAL_MIN和VERTICAL_MAX锁定旋转范围,避免角度超过90度导致翻转。 - 替换累加旋转为直接赋值:不再用
rotate_x累加旋转,而是直接设置vertical_pivit.rotation.x为经过限制后的vertical_rotation,确保视角始终在安全范围内。 - 保留水平旋转逻辑:水平旋转不需要限制,保持360度无限制的正常体验即可。
你可以根据游戏需求调整VERTICAL_MIN和VERTICAL_MAX的数值,比如改成上下70度(对应-1.22和1.22弧度),找到最适配你游戏的视角范围。
内容的提问来源于stack exchange,提问作者Coding_Guy
相关产品推荐
相关产品推荐

