見出し画像

【Godot3.2】Input Actionsを理解する

Gutterfly Farmです。ごきげんよう。あんまり良くはないな。

今日はひきつづき、Godotの入力について学びます。

スクリプトから特定のキーを指定することで、いま何が押されたのか調べることができますが…

func _input(event):
	if event is InputEventKey and event.pressed:
		if event.scancode == KEY_A:
			print("A")

このやり方はプロジェクトが小規模なうちは直感的で良いですが、必ずどこかで破綻します。代わりに、Godotの便利な機能Input Actionsの使い方を学びましょう。

参考記事


Input Mapの設定

まずはProject Settings > Input Mapを開きます。

画像1

すでに基本的な操作が割り当てられていますが、なるべく自分のゲームに合わせてInput Mapを作ることが推奨されています。

名前を入れてAddします。"shoot"としておきますか。

画像2

1番下に"shoot"が追加されています。

画像3

+を押して好きなキーを割り当てます。ここではSpcaeとマウスのLeft Buttonを選びました(マウスのdeviceは0のままでいいらしい)。


スクリプトにて

func _input(event):
   if event.is_action_pressed("shoot"):
       print("shoot pressed!")

さきほどInput Mapで設定した名前("shoot")を渡します。再生すると、Spcae、または左クリックしたときに関数が実行されました。

画像4


いくつかのメソッド

is_action_pressed()is_action_released()はキーがいま押されているかどうかを判断します。

is_action_just_pressed()is_action_just_released()というメソッドもあり、これは単一フレームでのみTrueを返します。繰り返しキーを押す必要のある動作はこちらを使ったほうがいいそうです。

_input()の中ではどっちも変わらないような?

連続した入力を必要とする場合は_process()関数内でInputを使います。

func _process(delta):
   if Input.is_action_pressed("shoot"):
        #毎フレーム実行される


課題

・_input()と_unhandled_input()の違いがわからないけどまあいいや
・最終的にはゲームの中でInputMapを変更できるようにしたい


この記事が気に入ったらサポートをしてみませんか?