最近想到 godot 如何新增虛擬搖桿
上YT搜尋一下找到個影片
"Godot Mobile Joystick"
https://www.youtube.com/watch?v=j6H6Enuvb7s
測試後真的可行
把它整理出來給大家參考
首先需要新增一個 TouchScreenButton 物件
改名叫做 JoyStick
在 godot 中
物件名稱的重要性比 unity 3D 要重要很多
然後設定成圓圈圖案

再新增一個 sprite2D 物件
設定成一個小點圖案

然後設定 JoyStick 的 shape 為 circle shape
並且調整 radius 到圓圈大小範圍

都設定完成後應該會長這樣

然後在 JoyStick 上面新增程式
extends TouchScreenButton
# knob 是 搖桿中的中心點
@onready var knob = get_node("./JoyStickNob")
# 取得範圍最大半徑
@onready var max_distance = shape.radius
# 取得按鈕中心,用來計算方向的
var stick_center: Vector2 = texture_normal.get_size() / 2
# 是否觸碰中
var touched: bool = false
func _ready():
# 非觸碰,不計算向量
set_process(false)
func _input(event):
# 有觸碰事件才計算向量
if event is InputEventScreenTouch:
if event.pressed:
set_process(true)
elif not event.pressed:
set_process(false)
# 蘑菇頭回歸搖桿中心
knob.position = stick_center
func _process(delta):
# 每一偵的計算
# 取得滑鼠位置-並將蘑菇頭與滑鼠位置重疊
knob.global_position = get_global_mouse_position()
print("LOG 374798 knob.global_position = ", knob.global_position)
# 限制蘑菇頭位置不能超出搖桿
knob.position = stick_center + (knob.position - stick_center).limit_length(max_distance)
print("LOG 374700 knob.position = ", knob.position)
func get_joystick_dir() -> Vector2:
# 取得蘑菇頭與搖桿中心向量 = 移動方向
var dir = knob.position - stick_center
# 避免一開始的蘑菇頭設定中心誤差
if abs(dir[0]) + abs(dir[1]) < 10:
dir = Vector2.ZERO
print("LOG 374799 dir = ", dir)
return dir
註解我都寫在上面了
應該是可以理解在做什麼
然後到要操控的物件裡面新增程式碼
func _physics_process(delta):
# 取得JoyStick物件,這邊路經因人而異,我這邊是從根開始取得
var joyStick = get_node("/root/World/Camera2D/CanvasLayer2/HBoxContainer/JoyStick")
# 方向參數要 normalized
dect = joyStick.get_joystick_dir().normalized()
# 乘上速度,並且設定速度
set_velocity(dect * 100)
# 移動物件
move_and_slide()
這樣應該就能看到物體隨著蘑菇頭方向移動了

這算是相當簡易的方法了
也不需要額外套件之類
給大家參考囉~![]()

留言板
歡迎留下建議與分享!希望一起交流!感恩!