
Publisher
marcofazio
Virtual Joystick
A simple yet powerful virtual joystick for touchscreens in Godot, packed with useful options to enhance your game's mobile experience.
This plugin has been mirrored from the Godot Asset Library.
The plugin author is in no way affiliated with Gadget.
If you are the author of this plugin and would like this mirror removed, please contact support@gadgetgodot.com.
Godot Virtual Joystick
A simple yet powerful virtual joystick for touchscreens in Godot, packed with useful options to enhance your game's mobile experience.
š® Features
- Easy to integrate
- Customizable appearance
- Multiple joystick modes
- Input action support
- Visibility options
šø Preview
š Quick Start
- Add the joystick to your scene
- Configure the options
- Use the following script to get started:
extends Sprite2D
@export var speed : float = 100
@export var joystick_left : VirtualJoystick
@export var joystick_right : VirtualJoystick
var move_vector := Vector2.ZERO
func _process(delta: float) -> void:
# Movement using Input functions:
move_vector = Input.get_vector("ui_left", "ui_right", "ui_up", "ui_down")
position += move_vector * speed * delta
# Rotation:
if joystick_right and joystick_right.is_pressed:
rotation = joystick_right.output.angle()
āļø Options
Option | Description |
---|---|
Joystick Mode | Fixed, Dynamic, or Following |
Dead Zone Size | Minimum distance for output |
Clamp Zone Size | Maximum distance for output |
Visibility Mode | Always, Touchscreen Only, or When Touched |
Use Input Actions | Trigger input actions defined in Project Settings |
š Setup Tips
- Create a
CanvasLayer
node named "UI" for all UI elements - Add the Joystick scene as a child of the UI node
- Enable "Editable Children" to customize joystick appearance
- Refer to the example scene in the "Test" folder
š FAQ
Multitouch Issues?
Ensure these settings in Project -> Project Settings -> General -> Input Devices:
- "Emulate Touch from Mouse" : ON
- "Emulate Mouse from Touch" : OFF
If other buttons don't work with this configuration, use TouchScreenButton instead of TextureButton.
Input.get_vector() Not Working?
ā ļø Fixed in Godot 4.2.1
For earlier versions, use this workaround:
input_vector := Vector2.ZERO
input_vector.x = Input.get_axis("ui_left", "ui_right")
input_vector.y = Input.get_axis("ui_up", "ui_down")
Freeze/crash on Android editor
As mentioned in the Docs, the Android editor is still unstable.
š¤ Contributing
Contributions are welcome! Feel free to submit issues or pull requests on the GitHub repository.
š License
This project is licensed under the MIT License - see the LICENSE file for details.
Made with ā¤ļø for the Godot community