リンドくん
たなべ先生、Unityでゲームを作ってるんですけど、PCでもスマホでもコントローラーでも遊べるようにしたいんです。でも、それぞれの操作方法をどう実装すればいいか分からなくて...
たなべ
そういう時こそInput Systemの出番なんだ。
この仕組みを使えば、キーボード、タッチ、ゲームパッドなど、異なる入力デバイスを一つのシステムで管理できるんだよ。
現代のゲーム開発において、マルチプラットフォーム対応は避けて通れない課題となっています。
プレイヤーはPCでキーボードとマウスを使って遊んだり、スマホでタッチ操作をしたり、ゲームコントローラーを接続して遊んだり、様々なデバイスでゲームを楽しみたいと考えています。
しかし、従来のUnityの入力システム(Input Manager)では、各デバイスごとに異なる入力処理を書く必要があり、コードが複雑になりがちでした。そんな問題を解決するのが新しいInput Systemです。
この記事では、Unity初心者の方でも理解できるよう、Input Systemを使ったマルチプラットフォーム対応の基本から実装方法まで、段階的に解説していきます。
HackATAは、エンジニアを目指す方のためのプログラミング学習コーチングサービスです。 経験豊富な現役エンジニアがあなたの学習をサポートします。
✓ 質問し放題
✓ β版公開中(2025年内の特別割引)
リンドくん
そもそもInput Systemって、従来の方法と何が違うんですか?
たなべ
一番の違いは「アクション」という概念なんだ。
従来は「スペースキーが押されたか」を直接チェックしていたけど、Input Systemでは「ジャンプアクションが実行されたか」という形で考えるんだよ。
Input Systemは、Unityが提供する新しい入力管理システムです。従来のInput Managerを置き換えるもので、以下のような特徴があります。
従来の方法では、こんなコードを書く必要がありました。
Input Systemを使えば、以下のようにシンプルになります。
このコードでは、jumpActionに対してどのデバイスからの入力でも同じ処理が実行されます。デバイスごとの分岐処理が不要になるため、コードがシンプルで保守しやすくなるのです。
Input Systemを導入することで、以下のようなメリットが得られます。
リンドくん
実際に使うにはどうすればいいんですか?
たなべ
Unity6からはInput Systemはデフォルトで使えるようになっているよ!
逆に従来のInput Managerは設定しないと使えないようになっているからそこだけ注意してね。
従来のInput Managerを有効にするには、プロジェクト設定を変更する必要があります。
Project Settingsを開く
Edit > Project Settingsを選択Player設定に移動
Playerを選択Active Input Handlingを変更
Other Settingsセクションを展開Active Input Handlingを以下のいずれかに設定
Input Manager (Old) - Input Managerのみ使用Both - 新旧両方を使用この設定変更後も、Unityエディタの再起動が必要になる場合があります。
Input Systemでは、入力設定をInput Actions Assetというファイルで管理します。
Assetの作成
Create > Input Actionsを選択PlayerInputActions)を付けますAssetをダブルクリックして開く
最初のAction Mapを作成
+ボタンでAction Mapを追加これで、Input Systemを使用する準備が整いました!
リンドくん
Action Mapって何ですか?Actionとは違うんですか?
たなべ
Action Mapは入力のグループで、Actionは個別の操作なんだ。
例えば「ゲームプレイ用の入力」というAction Mapの中に、「移動」「ジャンプ」「攻撃」といった個別のActionがある、という感じだね。
Action Mapは、関連する複数のActionをグループ化したものです。ゲームの状態に応じて、有効にするAction Mapを切り替えることができます。
例えば、以下のようなAction Mapを作ることが一般的です。
Input Actions Editorで実際にActionを作成してみましょう。
Action Mapを選択
新しいActionを追加
+ボタンをクリックAdd Actionを選択Actionの名前を設定
Action Typeを設定
Actionに対して、実際のデバイス入力を紐付けるのがBindingです。
Bindingを追加する手順は以下の通りです。
Actionを選択
Bindingを追加
+ボタンをクリックしてAdd Bindingを選択入力デバイスを選択
PathフィールドをクリックKeyboard > Space、Gamepad > Button Southなど複数のBindingを追加することで、一つのActionに複数のデバイスからの入力を割り当てられます。これがマルチプラットフォーム対応の鍵となります!
リンドくん
PCとゲームパッドで違う操作にしたいときはどうすればいいんですか?
たなべ
それにはControl Schemeを使うんだ!
これを使えば、「キーボード+マウス用」「ゲームパッド用」「タッチ用」といったデバイスセットごとの操作体系を定義できるよ。
Control Scheme(コントロールスキーム)は、特定のデバイスセットに対する操作体系を定義するものです。例えば以下のようなスキームを作成できます。
各Control Schemeには、使用するデバイスの種類と、そのスキーム専用のBindingを設定できます。
Input Actions Editorで Control Schemeを作成してみましょう。
Control Schemesタブを選択
新しいSchemeを追加
+ボタンをクリック使用するデバイスを追加
Add Deviceをクリック必須・オプションの設定
Requiredにチェックを入れると、そのデバイスが必須になります各BindingにControl Schemeを割り当てることで、特定のスキームでのみ有効な入力を定義できます。
Actionを選択し、Bindingを表示
Bindingの詳細を開く
Control Schemeを選択
Control Schemeドロップダウンから適用するスキームを選択例えば、「Move」Actionに対して以下のように設定できます。
このように設定することで、プレイヤーが使用しているデバイスに応じて、自動的に適切な入力が選択されるのです!
リンドくん
実際のコードではどう書けばいいんですか?
たなべ
じゃあ、実際にキャラクターを動かすコードを書いてみようか。
Input Systemを使えば、どのデバイスから入力されても同じコードで処理できるんだよ。
まず、Input Actions Assetで以下の設定を行います。
Action Mapの作成
PlayerMoveアクションの作成
ValueVector2Bindingの追加
Keyboard&Mouse用(2D Vector Composite)
Gamepad用
Jumpアクションの作成
ButtonBindingの追加
Keyboard&Mouse用
Gamepad用
次に、実際にキャラクターを動かすスクリプトを作成します。
スクリプトを書いたら、Unityエディタで設定を行います。
Player Input コンポーネントを追加
Add Component > Player InputInput Actions Assetを割り当て
Actionsフィールドに作成したInput Actions Assetをドラッグ&ドロップBehaviorを設定
BehaviorをInvoke Unity Eventsに設定イベントの割り当て
Eventsセクションを展開PlayerAction Mapを展開Moveアクションの+ボタンをクリックPlayerController > OnMoveを選択JumpアクションにもOnJumpを割り当てこれで完成です!キーボード、ゲームパッド、どちらで操作してもキャラクターが動くようになりました。
このコードの重要なポイントは以下の通りです。
InputAction.CallbackContext - 入力の状態(開始、実行中、終了)を含む情報が渡されますcontext.ReadValue<T>() - 入力値を指定した型で取得しますcontext.performed - ボタンが押された瞬間を検出します従来の方法と比べて、コードが圧倒的にシンプルになったことが分かるのではないでしょうか。
リンドくん
実装してみたんですけど、うまく動かないことがあります...
たなべ
Input Systemは便利だけど、設定ミスで動かないこともあるんだよね。
よくある問題と解決法を見ていこうか。
症状: キーやボタンを押しても何も起きない
解決法
Player Input コンポーネントを確認
ActionsフィールドにInput Actions Assetが割り当てられているかDefault Mapが正しく設定されているかAction Mapが有効か確認
イベントの割り当てを確認
症状: キーボードでは動くがゲームパッドでは動かない(またはその逆)
解決法
Bindingを確認
デバイスの接続を確認
Control Schemeの自動切り替えを確認
Auto Switchが有効になっているか症状: キーボードとゲームパッドの両方で操作すると、両方が反応してしまう
解決法
Control Schemeを適切に設定
Player Inputの設定を変更
Auto Switchを有効にすると、最後に使用したデバイスが優先されます症状: Input Actions Editorで設定を変更したのに、ゲームに反映されない
解決法
保存とコンパイルを確認
Save AssetボタンをクリックC#クラスの自動生成を有効化
Generate C# ClassにチェックApplyをクリックこれらの解決法を試しても問題が解決しない場合は、一度Unityエディタを再起動してみてください。設定が正しく読み込まれることがあります。
リンドくん
Input Systemって最初は難しそうでしたけど、慣れると本当に便利ですね!
たなべ
そうなんだよ!最初の設定は少し手間だけど、一度作ってしまえばどんなデバイスにも簡単に対応できるからね。
マルチプラットフォーム開発には欠かせないツールだよ。
Input Systemを使ったマルチプラットフォーム対応について、基本から実装まで解説してきました。重要なポイントを振り返ってみましょう。
Input Systemの主な利点は以下です。
実装のポイント
現代のゲーム開発では、プレイヤーが好きなデバイスで遊べることが重要です。Input Systemを使いこなすことで、より多くのプレイヤーにゲームを届けることができます。
最初は設定項目の多さに戸惑うかもしれませんが、一度理解してしまえば、これほど強力なツールはありません。
ぜひ実際のプロジェクトで試してみて、マルチプラットフォーム対応の便利さを実感してください!