【Defold】キーボードやゲームパッドでGameObjectを動かす

2019/07/10Defold, DEVELOP

ユーザー入力によってGameObjectを動かすには

  1. input_binding によるキーアクションの割り当て
  2. GameObjectを動かすコードを書く

この工程が必要になります。

そもそもDefold Engineって何?という方はこちら

input_bindingファイルでキーアクションを割り当てる

プロジェクトフォルダのinput/game.input_bindingファイルを開きます。すると、Key Triggers とGamepad Triggers項目があるので両方に入力アクションを設定します。両方に設定するのは、キーボード入力とゲームパッドに対応するためです。

キーの種類アクション
key-upup
key-downdown
key-leftleft
key-rightright

今回は上下左右の方向キーまたは、ゲームパッドの上下左右キーでGameObjectを動かしたかったのでこの様にしました。設定出来たら、スクリプトファイルを作成してコードを書きます。

スクリプトファイルの作成

プロジェクトビューの項目を右クリック -> [New…]->[Script]を選択します。

ファイル名は分かりやすい名前を付けておきましょう。名前が入力出来たら[Create Script]でファイルを作成します。

GameObjectにスクリプトを追加する

作成したスクリプトはGameObjectを右クリック->[Add Component File]から設定します。

設定できたらイメージの様な状態になっているかと思います。

Pathの右側にある矢印からファイルを開くことが出来ます。

スクリプトを書く

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で自身の座標を取得して、移動速度に応じて座標を移動させます。

実行結果

Posted by kazupon