新旧入力システムの併用
Unityのゲーム操作の入力処理
Input Manager 従来から使用されている方式。ネットで検索して見つかるコードの大半がこちらを使用してる(2021.12現在)
入力の割り当て・変更: Build Settings -> Player Settings -> Input Manager
Input System 新方式。本講義で扱ったRoll a Ball プロジェクトもこちらを使用している。
入力の割り当て・変更: AssetsにInput Actionsを追加する。
右クリック → Create → Input Actions 。
または保存済みのInput Acionsファイルをダブルクリックしてアクション編集パネルで設定する。
新旧システムの併用
新方式のInput Systemをプロジェクトに設定(パッケージをインポート)すると旧方式のコードはエラーになってコンパイルが通らなくなる。つまり混在できない。
エラーの回避(新旧方式の混在)方法が2通りある。
・Input Systemの旧方式互換コードを使用して、Input Manager用のコードを書き換える。 公式ドキュメント(Migrating from the old input system)
・設定を変更する
Build Settings -> Player Settings -> Other Setting -> Configuration -> Action Input Handling
を
both
に変更
C#のプリプロセッサによる新旧入力システムのどちらにも対応したコードの書き方も公式ドキュメント(Migrating from the old input system)に記載されている。
Input SystemのInput Actions用コードの書き方
3通りある。
・Send Messages/Broadcast Messagesを設定して通知を受け取る
Roll a Ballチュートリアルや、この講義のコード例で示した方式はこれ。
Input Actionsで設定したアクション名に対応したメソッドを用意する。アクション名がMove なら OnMoveになる。
・Invoke Unity Eventsを設定して通知を受け取る
イベントを処理するメソッドをUnity側にも設定する。メソッド名は任意。メソッド内でイベントを発生させたアクションの判定が必要。
C#のメソッド名を修正した場合、Unity側でもメソッドの変更が必要。
・Invoke C Sharp Eventsを設定して通知を受け取る
イベントを処理するメソッド名はC#スクリプト側で設定する。
メソッド名は任意。メソッド内でイベントを発生させたアクションの判定が必要。
OnMove()の様なアクション用のメソッドが多数必要な場合はこちらのコードの書き方で複数のアクションを一括して処理した方が見通しがよい。