extends Node3D func _input(event) -> void: if !event.is_action_type(): return if event is InputEventKey: if not Global.controller_type == Enum.EControllerType.Keyboard: Global.controller_type = Enum.EControllerType.Keyboard SignalManager.input_device_change.emit() elif event is InputEventJoypadButton or event is InputEventJoypadMotion: if not Global.controller_type == Enum.EControllerType.Joypad: Global.controller_type = Enum.EControllerType.Joypad SignalManager.input_device_change.emit() else: return for action_name in InputMap.get_actions(): if event.is_action_pressed(action_name): SignalManager.input_action_pressed.emit(action_name) elif event.is_action_released(action_name): SignalManager.input_action_released.emit(action_name) var input_dir: Vector2 = Input.get_vector("move_left", "move_right", "move_up", "move_down") # 限定为8方向 if input_dir.length() > 0: # 计算角度并将其限制为45度的倍数 var angle = input_dir.angle() var snapped_angle = round(angle / (PI / 4)) * (PI / 4) input_dir = Vector2(cos(snapped_angle), sin(snapped_angle)) SignalManager.input_action_move.emit(input_dir)