【Defold】キーボードやゲームパッドでGameObjectを動かす
ユーザー入力によってGameObjectを動かすには
- input_binding によるキーアクションの割り当て
- GameObjectを動かすコードを書く
この工程が必要になります。
そもそもDefold Engineって何?という方はこちら。
目次
input_bindingファイルでキーアクションを割り当てる
プロジェクトフォルダのinput/game.input_bindingファイルを開きます。すると、Key Triggers とGamepad Triggers項目があるので両方に入力アクションを設定します。両方に設定するのは、キーボード入力とゲームパッドに対応するためです。
キーの種類 | アクション |
key-up | up |
key-down | down |
key-left | left |
key-right | right |
今回は上下左右の方向キーまたは、ゲームパッドの上下左右キーでGameObjectを動かしたかったのでこの様にしました。設定出来たら、スクリプトファイルを作成してコードを書きます。
スクリプトファイルの作成
プロジェクトビューの項目を右クリック -> [New…]->[Script]を選択します。
ファイル名は分かりやすい名前を付けておきましょう。名前が入力出来たら[Create Script]でファイルを作成します。
GameObjectにスクリプトを追加する
作成したスクリプトはGameObjectを右クリック->[Add Component File]から設定します。
設定できたらイメージの様な状態になっているかと思います。
スクリプトを書く
GameObjectの設定が済んだら、スクリプトファイルを開いて、コードを書きます。スクリプトを作成した時に中身が埋まっていない空の関数が並んでいるので、そこを埋めていきます。
function init(self)
-- 自身へ入力をフォーカスしユーザー入力を受け付ける状態にする
msg.post(".", "acquire_input_focus")
-- 移動速度
self.velocity = vmath.vector3()
end
まずは、動かすGameObjectが自身で入力を受け付けられる様に、cquire_input_focusをセットします。するとユーザー入力に応じてon_inputが呼ばれる様になります。velocityは今回GameObjectを移動させるために移動速度を設定するために用意した変数です。
function on_input(self, action_id, action)
-- 上下移動
if action_id == hash("up") then
self.velocity.y = 100
elseif action_id == hash("down") then
self.velocity.y = -100
end
-- 左右移動
if action_id == hash("left") then
self.velocity.x = -100
elseif action_id == hash("right") then
self.velocity.x = 100
end
end
on_input が呼ばれる様になったら入力に応じて移動速度を設定します。上下左右の入力毎に向きを考慮して値を設定します。
function update(self, dt)
local pos = go.get_position()
pos = pos + self.velocity * dt
go.set_position(pos)
self.velocity.x = 0
self.velocity.y = 0
end
最後にupdateで自身の座標を取得して、移動速度に応じて座標を移動させます。