[UNITY公式チュートリアル / Input System]#1 導入~基本設定

Input Systemとは?

 

UNITYはデフォルトの入力関係を「Input Manager」というシステムで管理していますが、さらに多機能な「Input System」という公式アセットを使えば、様々な利点があります。

本記事では、Input Systemを導入する際に役立つ公式チュートリアルを日本語で解説しますので、

Input Systemがそもそもなんなのかを知らない方は↓この記事が非常に解りやすいので先に読んでおくといいかもしれません。

ゲーム開発65535 Ver2 / 【Unity】Input Systemの紹介

 

公式チュートリアルとは?

UNITYは、Unity Learnというサイトにチュートリアルを無数に掲載していますが、日本語化されているのはごくわずかです。

しかし、「英語はちょっと…」と諦めてしまうのは非常にもったいないので、チュートリアルの最初の導入部分のみ、私が読み解いた内容を画像つきで解説します。

 

まずはRoll-a-Ballをインストール

UNITYのチュートリアルのなかで最も有名なものといえば「Roll-a-Ball」ですね。

本チュートリアルではこのRoll-a-Ballの完成プロジェクトを使います。

まずはUNITYのアセットストアでRoll-a-Ballの完成プロジェクトをゲットしてください。当然無料です。

https://assetstore.unity.com/packages/essentials/tutorial-projects/roll-a-ball-tutorial-complete-77198

次にUNITYの新規Projectを3Dで作ります。このチュートリアルでは2021.2.0f1を使います(ある程度新しいバージョンでなければPackage ManagerからInput Systemを導入できないため)。

新規プロジェクトが開けたら、PackageManagerからRoll-a-Ballの完成プロジェクトをImportします。

すると、恐いエラーが出ます。

これはProject Settings → Player → Other Settings → Use Deterministic Compilationのチェックを外すと解決します。

エラーが解決した…と思ったら↓こんなエラーも出るのですが、これは無視してOKなエラーです。

最後に、_Completerd-GameフォルダのRoll-a-ballシーンを開きましょう。

Input Systemを導入

続いて、Input SystemをImportします。

Importしようとすると、こんな警告が出ます。

This project is using the new input system package but the native platform backends for the new input system are not enabled in the player settings.
This means that no input from native devices will come through.
Do you want to enable the backends?
Doing so will RESTART the editor and will DISABLE the old UnityEngine, Input APIs.

(このプロジェクトは新しい入力システムパッケージを使用していますが、新しい入力システムのネイティブプラットフォームバックエンドがプレーヤー設定で有効になっていません。
これは、ネイティブデバイスからの入力が届かないことを意味します。
バックエンドを有効にしますか?
これを行うと、エディターが再起動し、古いUnityEngineの入力APIが無効になります。

バックエンド=ユーザーが直接操作することのないシステムの部分のことで、要するに「既存の入力システムであるInput Managerが使用不能になるけど大丈夫?」と言っています。

「Yes」を押して再起動しましょう。

再起動すると、こんなエラーがでますが無視してOKです。

また、Importした時点で自動的にInput Managerが無効化され、Input Systemが有効になっています。これを確認するためには、Project Settings → Player → Other Settings → Active Input Handling を確認します。

Input System Package(New) になっていればOKです。

ここで、公式チュートリアル上では、

この設定を Both(Input ManagerとInput Systemを両方使う)に変更しましょう

などと書かれているのですが、これはオススメしません。Input Systemを導入するならInput Systemに一本化しないと予期せぬエラーが発生します。

続いて、Project Settings → Input System Package から Create settings asset ボタンを押します。

これで、新しく作成された入力設定アセットがプロジェクトにInputSystem.inputsettings.assetとして保存されました。

この状態で Window → Analysis → Input Debugger を押すと、現在接続されているデバイスが一覧表示されます。

↑Xboxコントローラーを繋いだ様子。ちゃんと認識されてます。

基本設定

導入してからの第一歩は、Input System の根幹となる「アクションマップ」と「アクション」の基本設定です。

HierarchyウィンドウでPlayerという名前の球体のGameObjectを選択し、InspectorウインドウのAdd ComponentボタンからPlayer Input コンポーネントを追加します。

※本来はシングルトン化した単独のゲームオブジェクトを作ったほうがいいのですが、ここはチュートリアルどおりに進めます。

続いて、InputActionAssetを作ります。Projectウインドウの右クリックからCreateしてもいいのですが、さきほど追加したコンポーネント内の「Create Actions...」ボタンからも作成できます。

※Projectウインドウの右クリックからCreateした場合は、先ほどPlayerオブジェクト内に追加したPlayerInputコンポーネントのActionsに、生成されたInputActionAssetをアタッチしてください。

Projectウインドウに作成されたInputActionAssetをクリックしてEdit assetボタンを押すと、編集ウインドウが開きます。

このウインドウがInput Systemの根幹となります。

左側が「アクションマップ」、右側が「アクション」です。

「アクションマップ」と「アクション」の違い
Input Systemでは、「オープニング画面」「戦闘中」「フィールド画面」「ポーズ中」など、ゲームの場面によって操作方法を切り替える処理をします。場面ごとの操作方法をまとめたもの=アクションマップです。
さらにInput Systemは、その場面内で「ジャンプ」「移動」「攻撃」「決定」「ポーズ」などといいた「ゲーム内で起こること」をアクションマップごとにまとめて、それらにキーを割り当てる…という処理をします。ゲーム内で起こること=アクションです。
アクションマップのなかにアクションがある…解りにくいですが、この構造を理解しなければ後々苦労するので、頑張って覚えましょう。

最後に、旧Input Managerの仕様のままになっているEventSystem(UIの操作を管理するオブジェクト)をInput System用に修正する必要があります。

といってもやることは簡単で、HierarchyウインドウのEventSystemを選択し、Inspectorウインドウの Replace with InputSystemUIInputModule ボタンを押すだけです。

 

…以上、Input Systemの導入と基本設定の概要でした。お疲れ様でした!

次の記事はこちら

[UNITY公式チュートリアル / Input System]#2 プレイヤーの動き