Search Unity

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

, 11月 26, 2020

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

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

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

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

新しい「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 ブランチで継続しています。

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

制御スキーム

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

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

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

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

UI と対話する

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

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

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

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

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

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

インタラクティブな再バインドを設定するための API には、再バインドが完了したときの操作も含まれています。これにより、このイベントに基づいて 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 のページをご覧ください。

 

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

Why this is not part of the core yet? It doesn’t make sense to have it as an asset external to Unity (aka package, repo, you name it).

Great!! Totally worth the time. but I have a question we are able to use the new input system with ESC??

I haven’t used ECS but will look into how it integrates for when DOTS technology packages are Verified.

sadly as nice as this demo is, it doesn’t offer me any more clarity on how to achieve what i want, instead it pretty much establishes what’s already been said, just with an example. i remain confused in the same ways as before. assumptions seem to be made on how many players there are, if not enough controllers are there then multiple players are moved form one controller even after another is added.

Hi RR7!

Im sorry you didn’t find that it helped you in what you want to achieve; im curious what your desired goal and setup is? What particular areas are you confused about?

In terms of spawning number of players; for the next release im going to work on updating the project so that you can either manually set number of players (As it currently is) or switch to automatic setup (Detect 4 possible input devices are plugged in and spawn up to that many). Unfortunately, I was not able to get this added in-time for this release but will add it to the next one. :)

Great post and overview. This system will be gold when remaining bugs and performance issues are addressed. I hope bugs take priority over new features since after 1.0, many of us are already using the new InputSystem in production. It is a leap forward over the old-gen system so I’m looking forward to future releases.

Hey NongBenz!

Which remaining bugs and performances issues are you running into? have you reported them through the Bug Reporter?

I’m going to try it now. These posts in unity blogs are pure Gold. They help a lot to developers get their hands into these new systems easily and try them. Thanks Kristyna & Andy!

I think integrating with VR controllers is a good idea for a future blog as well. There’s a large amount of VR games which are diorama style, or you have games like star wars squadrons. There’s a lot more games now where the VR side is optional so it would be nice to see an example which could work.

Good point! Admittedly, I am not savvy with XR platforms, features and tools so did not write about them or implement them into this blogpost. And as you have pointed out; it would be probably be ideal to have a more XR Input focused blog/video that covers the typical setups, most-used hardware and edge-cases. Ill talk to more knowledgable folks internally about this. :)

I’d love to see an XR focused Input System review also Andy.. This blog post and content was really good and I do feel like I’ve come up to speed a bit. I notice in the XRIntegrations examples on Github, that project is making heavy use of Input Action References, and employs some kind of Action Manager on each XR controller for switching contexts, ultimately a bit confusing how this is working, but it does..a vid would be great though to better understand that more complex example.

Very interesting stuff, however in the title you mention VR, but impossible to find anything on it in the article nor in the documentation. Is there info about it somewhere else?

Hey Thibault!
Im not savvy with VR tools and platforms; but there are VR controller inputs in the Input Bindings menu when setting up Input Actions. I will look into more VR focused content in the future. :)

Comments are closed.