![見出し画像](https://assets.st-note.com/production/uploads/images/35026219/rectangle_large_type_2_995178146f6bac634ab95c78c0a3e2ba.png?width=1200)
【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を開きます。
すでに基本的な操作が割り当てられていますが、なるべく自分のゲームに合わせてInput Mapを作ることが推奨されています。
名前を入れてAddします。"shoot"としておきますか。
1番下に"shoot"が追加されています。
+を押して好きなキーを割り当てます。ここではSpcaeとマウスのLeft Buttonを選びました(マウスのdeviceは0のままでいいらしい)。
スクリプトにて
func _input(event):
if event.is_action_pressed("shoot"):
print("shoot pressed!")
さきほどInput Mapで設定した名前("shoot")を渡します。再生すると、Spcae、または左クリックしたときに関数が実行されました。
いくつかのメソッド
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を変更できるようにしたい
この記事が気に入ったらサポートをしてみませんか?