I am studying the Godot Engine and GDScript and I searched on the internet about keyboard events, but I didn't understand. Is there something in Godot like: on_key_down("keycode")
?
Godot Keyboard Events
16.9k views Asked by user193464 AtThere are 7 answers
There's no official OnKeyUp option, but you can use the _input(event)
function to receive input when an action is pressed/released:
func _input(event):
if event.is_action_pressed("my_action"):
# Your code here
elif event.is_action_released("my_action):
# Your code here
Actions are set in Project Settings > Input Map.
Of course you don't always want to use _input
, but rather get inputs within the fixed updates. You can use Input.is_key_pressed()
but there's no is_key_released()
. In that case you can do this:
var was_pressed = 0
func _fixed_process(delta):
if !Input.is_key_pressed() && was_pressed = 1:
# Your key is NOT pressed but WAS pressed 1 frame before
# Code to be executed
# The rest is just checking whether your key is just pressed
if Input.is_key_pressed():
was_pressed = 1
elif !Input.is_key_pressed():
was_pressed = 0
That's what I've been using. Feel free to inform me if there's a better way to do OnKeyUp
in Godot.
Godot versions 3.0 and up have new input-polling functions that can be used anywhere in your scripts:
Input.is_action_pressed(action)
- checks if the action is being pressedInput.is_action_just_pressed(action)
- checks if the action was just pressedInput.is_action_just_released(action)
- checks if the action was just released
There is no _on_key_pressed() function in godot. Instead godot stores certain action e.g.- shoot, walk, jump as Input Maps which can be bound to certain keys (can be more than one). Then to detect the action in code there are three functions:
- Input.is_action_just_pressed(NameOfAction) - a single key press
- Input.is_action_pressed(NameOfAction) - detects if key is being held down
- Input.is_action_just_pressed(NameOfAction) - detects if key is released
These functions can be used to detect player input in a script
NOTE- there are a bunch of default ui actions already stored in every godot project like ui_up for up arrow. If you want custom actions or inputs then you can go to the Project Settings -> Input Maps and add the actions and add the specific key, mouse click or joystick movement.
SAMPLE PROJECT:
Open a new project
Go to Project Settings -> Input Maps
In the text box type shoot and hit ENTER or click ADD
Add the spacebar to this action
Add a new scene with a script
In the script write-
if Input.is_action_pressed("shoot"): #Code for shoot mechanic pass
You can use InputEvent to check for specific Keys.
Check out the documentation: http://docs.godotengine.org/en/stable/learning/features/inputs/inputevent.html