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")
?
You can use InputEvent to check for specific Keys.
Check out the documentation: http://docs.godotengine.org/en/stable/learning/features/inputs/inputevent.html
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
You can use InputEvent to check for specific Keys.
Check out the documentation: http://docs.godotengine.org/en/stable/learning/features/inputs/inputevent.html
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.
If you're considering using Input or _Input(event), it's important you go into your project settings and bind your keys.
Press project setting in the toolbar, go to input map and then you can name an action and add any key, mouse or joystick to it. The in the code use:
if Input.is_action_just_pressed('Your action name'):
print('Pressed!')
There are multiple ways to register keys:
-is_key_pressed("Enter")
-Input.is_action_pressed(*action*)
I would use Input.is_action_pressed() because it allows you to work with the input manager.
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
Something along the lines of:
if Input.is_action_just_pressed("key"):
#what you need to do
should work; however, you need to reconfigure the input map by looking on the top bar (the bar at the top of the screen on Mac), selecting "project" , a popup appears, select "project settings", and select "input map".
Then, you can add an action (name matters, i.e. "left","right", whatever you put into the parameter "key", etc), click the plus arrow, and press whatever key you need to link.
Hope this helps!
© 2022 - 2024 — McMap. All rights reserved.