【Unity】RPGを作るチュートリアルその36 ゲーム内のキー入力のラッパークラス

【Unity】RPGを作るチュートリアルその36 ゲーム内のキー入力のラッパークラス

シンプルなRPGをUnityで作るチュートリアルシリーズの36回目です。

第35回ではデバッグ用の機能としてログのラッパークラスを作成しました。

今回はゲーム内のキー入力を検知するためのラッパークラスを追加します。PC向けのゲームの場合、決定キーやキャンセルキーの役割を担うキーが複数あったりするので、その部分をまとめて検知する仕組みを用意したいと思います。

 

 

制作環境

MacBook Pro 2023 Apple M2 Max

Unity6 (6000.0.30f1) Silicon

 

作業内容と順序

シンプルなRPGを作る上でどんな作業が必要か、どんな順番で作っていくと良さそうか、別ページで検討しました。基本的にこの流れに沿って進めていきます。

 

チュートリアルの一覧

このシリーズ全体の一覧は以下のページにまとめています。

 

前回の内容

前回はデバッグ用の機能としてログのラッパークラスを作成しました。

 

キー入力のラッパークラス

PC向けのゲームの場合、同じ役割を持ったキーが複数あることもあります。例えば決定の役割だと、エンターキー、スペースキー、Zキー、と複数のキーで同じ役割を担っていることが多いかと思います。キャンセルの役割なら、EscキーとXキーがよく使われるかと思います。

こうしたキーの入力を検知するために、毎回各クラスの中で複数キーの入力を確認するのは大変なので、複数のキー入力を確認できるラッパークラスを用意して、そこでいずれかのキー入力があったかどうかを確認します。具体的には、Input.GetKeyDown()を使って、「||」で繋いで該当のキー入力の有無を返したいと思います。

InputのGetKeyUpを使うか、GetKeyDownを使うかは悩む点ですが、スマホ向けだと指を離したタイミングで検知したいのでGetKeyUp、PCやコンソール向けだとキーを押したタイミングで検知したいのでGetKeyDownを使うのが良いかと思います。スマホの場合、指をずらすことでボタンのタップを回避できることからUpの方がよく使われているように思います。PCやコンソールだと、ボタンを離して回避が難しいため、押した瞬間に反応した方が直感的かもしれません。

決定キー、キャンセルキー、方向キーで複数のキーを持たせることが多いですが、今回は決定キーとキャンセルキーを対象にしたいと思います。方向キーは矢印キーを使う方向で進めましょう。

 

キーの定義

一般的なキー配置を踏襲し、決定ボタンはエンターキー、スペースキー、Zキーを対象にします。

キャンセルボタンはEscキーとXキーを対象にします。

 

キー入力のラッパークラスの作成

Projectウィンドウの「Assets/Scripts」のフォルダにて、空のスクリプトを作成します。名前は [InputGameKey] にしました。

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

 

作成した「InputGameKey」の中身は以下のように記載しました。

決定ボタンの役割を持つキーをまとめたのが「ConfirmButton()」のメソッドで、キャンセルボタンの役割を持つキーをまとめたのが「CancelButton()」のメソッドです。

これらのメソッドをUpdate()のタイミングで呼ぶことによって、いずれかのキー入力を検知します。毎回「Input.GetKeyDown」と書かなくて良くなるので楽になるかと思います。また、「やっぱりキャンセルキーにあれも追加しておこう!」となったときに、キャンセルの処理を書いている全部のクラスの改修を行わなくて済みます。

今回は対象外ですが、キーコンフィグの機能がある場合は、コンフィグ用の設定ファイルを読み込んで、そのキーを検知する形にするのが良いかと思います。

 

動作確認

既存のクラス、あるいはテスト用に作ったクラスのUpdate()などから「InputGameKey」のメソッドを呼び出して、ログとして出力するようにしてみます。この状態でゲームを実行し、確認を行ってみます。

前回と同様に私は「PlayerMover」を使って、Update()に処理を書きました。これは後ほど消すので、githubのリポジトリでは(おそらく)含まれません。

 

ゲームの実行中に決定キーに対応するキーや、キャンセルキーに対応するキーを押すと以下のようにログが出力されます。決定キーの中でエンターキー、スペースキー、Zキーのどれが押されたとしても同様にログが出てきます。

キーに対応するログが出力された
キーに対応するログが出力された

 

キーの操作とログの出力の対応が確認できたら、テスト用の処理を削除して今回は終了です。

 

今回のブランチ

 

まとめ

今回はゲーム内のキー入力を検知するためのラッパークラスを作成しました。同じ機能を持ったキーの入力確認を1箇所にまとめておくことで管理もしやすくなります。

次回はいよいよ戦闘の機能全体を管理するクラスを作成していきます。作成するクラスの繋がりを確認しつつ、まずは管理クラスの枠組みだけ作っていきましょう。

 

     

ゲーム開発の攻略チャートを作りました!

CTA-IMAGE

「ゲームを作ってみたいけど、何から手を付けていいか分からない!」


そんなお悩みをお持ちの方向けに、todoがアプリをリリースした経験を中心に、ゲーム作りの手順や考慮すべき点をまとめたe-bookを作成しました。ゲーム作りはそれ自体がゲームのように楽しいプロセスなので、「攻略チャート」と名付けています。


ゲームを作り始めた時にぶつかる壁である「何をしたら良いのか分からない」という悩みを吹き飛ばしましょう!