Unity を検索

新しくなったチュートリアルとサンプルプロジェクト「Warriors」で Input System を学ぼう

2020年11月26日 カテゴリ: テクノロジー | 7 分 で読めます
取り上げているトピック
シェア

Input System を使えば、モバイルからVRまで、複数のプラットフォームに対応した制御システムを素早く構築することができます。初心者や中級者向けのサンプルプロジェクトや新しいビデオチュートリアルをご覧になって、今すぐ始めましょう。

入力システムは、リアルタイムプロジェクトをインタラクティブなものにするための中核となる要素です。Unity の入力システムは、制御システムの実装方法を標準化し、新しい高度な機能を提供します。このシステムは Unity 2019 LTS 以降のバージョンで「検証済み」となっています(Input System のドキュメントでサポートされている入力デバイスの完全なリストをご覧になれます)。

新しいチュートリアルコンテンツでは、マルチプラットフォーム向けの開発はまったく初めてという方でも、すぐに開発を始めることができるようになっています。すでにワークフローに慣れている方は、入力システムを使って Cinemachine などの Unity ツールを動かしたり、注力して開発が進められているサンプルプロジェクト「Warriors」を使って Unity の UI を動かす方法を学んでください。

3 月に行われた Meet the Devs セッションでは、なぜこの新しいシステムを開発したのかを説明し、ローカルマルチプレイヤーの設定、ゲームパッド制御システムの迅速な追加、新規プレイヤーのスポーン、モバイル向けの制御システムの実装などのワークフローの概要を見せるデモを行っています。また、Input System の開発責任者 Rene Damm が、ツールやチームのロードマップに関するオーディエンスからの質問にも答えています。

このコンテンツはサードパーティのプロバイダーによってホストされており、Targeting Cookiesを使用することに同意しない限り動画の視聴が許可されません。これらのプロバイダーの動画の視聴を希望する場合は、Targeting Cookiesのクッキーの設定をオンにしてください。

新しい「Roll-a-Ball(玉転がし)」プロジェクトに収録されている Input System の初心者向けチュートリアル

Unity の基本的な入力システムワークフローを知りたい初心者の方は、Unity Learn で公開している新しい Roll-a-Ball(玉転がし)プロジェクトをチェックしてみてください。このプロジェクトでは、Input System パッケージのインストールPlayer Input コンポーネントの追加プレイヤーへの入力データの適用など、最初に取り組むべき内容について解説しています。

「Roll-a-Ball」プロジェクトは、初心者の方が Input System の基本を知る上で役立つ内容となっています。

「Prototype」シリーズの宇宙船制御システムチュートリアル

「Prototype」シリーズの「Procedural Boss」チュートリアルでは新しい「Supernova」アートパックも使用されています。

プロシージャルアニメーションを使ってボスを作成する動画サンプルプロジェクトをご覧になってもわかる通り、Unity が提供している Prototype シリーズでも、Input System が使われています。宇宙船の入力アクションアセットでは、移動の制御、レーザー弾の発射、ブーストに入力システムが使われています。

「Warriors」:入力システムの組み込みとゲームプレイのシナリオに関する中級者向けチュートリアル

Warriors」は、クロスプラットフォームの 3 人称視点ローカルマルチプレイヤーとしては典型的な作りのゲームを題材として、Input System を使ってやや高度なツールと API のデモを行うプロジェクトです。Unity 2019 LTS で利用可能で、来年に Unity 2020 LTS がリリースされたタイミングで、同バージョンでも利用可能になるようアップデートが予定されています。プロジェクトは GitHub からダウンロード可能で、現在、3 つのブランチが用意されています。

  • V1 は先ほど言及した「Meet the Devs」セッションで披露したバージョンのプロジェクトを保存したブランチです。
  • V2 は Input System に関する最近の Unite Now セッションで使っているバージョンです(下の動画もご覧ください)。
  • 開発作業は Master ブランチで継続しています。

このコンテンツはサードパーティのプロバイダーによってホストされており、Targeting Cookiesを使用することに同意しない限り動画の視聴が許可されません。これらのプロバイダーの動画の視聴を希望する場合は、Targeting Cookiesのクッキーの設定をオンにしてください。

このプロジェクトは、シングルプレイヤーとローカルマルチプレイヤーの両方のモードで操作できるキャラクターを中心に構築されています。Game Manager のモードが「Local Multiplayer」に設定されている場合、Warrior プレハブから複数のインスタンスが生成されます。Warrior プレハブが Input System の Player Input コンポーネントを使用するように設定されているので、Warrior の各インスタンスには自動的に接続された入力デバイスがペアリングされます。

制御スキーム

この Warrior のコントロールスキームは、クロスプラットフォームでプレイできるように設定されており、キーボードやさまざまなゲームパッドを自動で切り替えて使うようになっています。この設定では、実行時の生の入力データにスムージングを適用して、プレイヤーがどの軸入力(キーボードのキーやゲームパッドのジョイスティック)を使用しても、キャラクターのいろいろな方向への動きが均一になるようにした例を示しています。また、以下の制御スキームは、ボタンが押下されたことを検出して基本的な攻撃アニメーションを発生させます。

また、Warrior の Input Action アセットには、2 つの異なるアクションマップが設定されています。1 つはキャラクターを制御するためのもの(移動や攻撃)、もう 1 つはメニューの入力を制御するためのものです。ゲームやインタラクティブなプロジェクトでは、通常、同じ入力バインディングを共用して、入力制御に対する要件が異なるさまざまな状態に対処することが求められます。

例えば、ジョイスティックをある方向に押すと、Warrior は対応する方向に向かって走り出します。しかし、ゲームがポーズ状態のときは、プレイヤーはジョイスティックを使って、ポーズメニューの中にある、選択可能なボタンやオプションの間を移動することができます。

入力システムを使用すると、シンプルな API を使用して、さまざまな制御スキームのシナリオに応じて異なるアクションマップを簡単に設定し、実行時に PlayerInput コンポーネントごとに切り替えることができます。具体的には、次のようなコードを実行します。

playerInput.SwitchCurrentActionMap(stringForMapName);

UI と対話する

UI と対話するためのアクションマップを設定したら、アクションを Event System の UI Input モジュールに割り当てることができます。

Warriors プロジェクトでは、各プレイヤーがゲームをポーズさせ、ポーズメニューを操作することができます。オーバーレイ表示される UI は、いくつかのオプションボタンと右側のコンテキストに応じて内容が変化するパネルで構成されています。Input System UI の Input モジュールは、Interactable を有効にした Unity UI コンポーネント(ボタンやスライダーなど)との対話に割り当てられたアクションを適用します。

この UI インタラクションは、ポーズボタンを押したプレイヤーだけが行える状態になります。例えば、プレイヤー3 がゲームをポーズさせた場合、プレイヤー1 と 2 はゲームを操作することができず、プレイヤー3 のみが操作できるようになります。プレイヤー3 がゲームのポーズを解除すると、すべてのプレイヤーの制御が復帰します。これを行うには、次に示す PlayerInput コンポーネントのメソッドを呼び出します。

playerInput.ActivateInput();

playerInput.DeactivateInput();

実行時の再バインディング

UI メニューには、実行時のボタンの再バインディングを制御するコンテキストパネルがあります。これにより、特定の Input Action に対してインタラクティブな再バインドを実行し、新しい入力バインディングを設定することができます。例えば、PlayStation コントローラーを使用している場合、攻撃アクションを×ボタンから△や R2 などの別の入力ボタンに再バインドすることができます。

この再バインドは、特定の PlayerInput コンポーネントへのオーバーライドとして適用されます。例えば、プレイヤー2 は攻撃ボタンを別のボタンに再バインドすることができますが、これがプレイヤー3 の攻撃の Input Action に影響することはありません。

インタラクティブな再バインドを設定するための API には、再バインドが完了したときの操作も含まれています。これにより、このイベントに基づいて UI の更新やゲーム状態の保存、その他のゲームプレイ要素の変更時に自分で制御システムを設定することができます。

private InputActionRebindingExtensions.RebindingOperation rebindOperation;

    void StartInteractiveRebind()
    {
        rebindOperation = inputAction.PerformInteractiveRebinding().OnComplete(operation => RebindCompleted());
        rebindOperation.Start();
    }

    void RebindCompleted()
    {
        rebindOperation.Dispose();

        // UI の変更を適用(新しいバインディングのアイコン)
    }

Input System と Cinemachine

Input System がイベントシステムや Unity UI と統合されていることに加えて、Warriors プロジェクトでは Cinemachine と連携して動作するように設定する方法も紹介しています。3 人称視点のゲームにおいて一般的なカメラの設定では、プレイヤーの周囲を移動して、マウスの位置やジョイスティックの押し方によって視野の方向を変えるフォローカメラが使われています。Cinemachine Input Provider コンポーネントを Cinemachine Free Look カメラリグに追加すると、Input Action から Vector2 の軸データを直接 Cinemachine に送り、軸の制御に使う値とすることができます。下の画像では、CinemachineInputProvider が Look Input Action からの入力データを使っているのが分かります。

Input System の API:データを表示する UI のサンプル

また、Input System にはさまざまな API が含まれており、他のシステムが実行時にデータにアクセスして UI などのビジュアルに表示できるようになっています。Warriors サンプルプロジェクトでは、Player Input からのデータを使用して、現在のプレイヤーのデバイスやプレイヤー入力 ID などの情報を表示したり、現在のバインディングの UI に基づく再バインドの制御を更新したりしています。デバイスとバインディングの文字列を受け取り、特定のアイコンを返すカスタムシステムを作成しました。

例えば、プレイヤーが Xbox コントローラを使用していて、アタックアクションが上側のコンテキストアクションボタンにバインドされている場合、Y ボタンのアイコンが表示されます。ただし、プレイヤーがキーボードを使用している場合は、現在バインドされているキーボードのキーに対応する文字が表示されます。この動作を実現する Device Display Configurator ツールを取り出して、皆さんご自身のプロジェクトでお使いいただくことは歓迎します。

Input System のサンプルとドキュメンテーション

入力システムパッケージには、この記事で紹介した他にも、パッケージマネージャーで検索できるサンプルがいくつか含まれています。これらを参考にして、皆さん自身のプロジェクトのために拡張したり、応用さしたりしてみてください。こちらのクイックスタートガイドも含む、公式ドキュメントも用意されています。

Input System 1.1 に関する予定

Input System 1.1 は現在プレビュー版として提供されています。このバージョンでは、多くの修正と改良が加えられています。再バインディングのデータを JSON として保存または読み込みできるようになりました(RebindSaveLoad.cs サンプルスクリプトをご参照ください)。また、デバイスレイアウトを事前コンパイルできるようになり、デバイスをインスタンス化する時間やガベージコレクション(GC)ヒープコストが大幅に削減されています。

コンテンツに関する要望をお寄せください

今回ご紹介したサンプルプロジェクトと学習教材が Input System を使い始めるきっかけとなり、皆さんのアイデアに命を吹き込むために役立てられれば幸いに思います。次に学びたいことをこの記事の下にあるコメント欄で教えてください。また、チュートリアルやその他のリソースについては Input System のページをご覧ください。

2020年11月26日 カテゴリ: テクノロジー | 7 分 で読めます
取り上げているトピック