最近想到 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()
這樣應該就能看到物體隨著蘑菇頭方向移動了
這算是相當簡易的方法了
也不需要額外套件之類
給大家參考囉~
留言板
歡迎留下建議與分享!希望一起交流!感恩!