Input Action アセット
Input Action アセット は、Input Action と、それらに関連付けられた Binding および Control Scheme を含むアセットです。これらのアセットはファイル拡張子が .inputactions
であり、プレーンな JSON 形式で保存されます。
Input Action アセットの作成
Unity で Input Action を含むアセットを作成するには、Project ウィンドウを右クリックするか、Unity のメインメニューから Assets > Create > Input Actions に移動します。
Input Action アセットの編集
Action エディターを起動するには、プロジェクトブラウザーで .inputactions
アセットをダブルクリックするか、アセットのインスペクターで Edit Asset ボタンを選択します。同時に複数のエディターウィンドウを開くことができますが、同じアセットの複数のウィンドウを開くことはできません。
Action エディターは、独立したウィンドウとして表示され、Unity のメイン UI にドッキングすることもできます。
ノート: Action Map、Action、Binding の動作の詳細については、Action に関するドキュメントを参照してください。
デフォルトでは、プロジェクトを保存しても、Action Asset ウィンドウで行った編集は保存されません。変更を保存するには、ウィンドウのツールバーで Save Asset を選択します。変更を破棄するには、ウィンドウを閉じ、確認メッセージが表示されたら Don't Save を選択します。または、ツールバーの Auto-Save チェックボックスをオンにすると、自動保存を有効にすることができます。これにより、アセットへの変更がすべて保存されます。
ノート: この設定はすべての
.inputactions
アセットに適用され、Unity エディターセッションをまたいで持続します。
Action エディターウィンドウは、以下の 3 つのペインに分かれています。
- 左ペインには、アセット内の Action Map のリストが表示されます。各 Action Map は、一括で有効または無効にすることができる Action の集合です。
- 中央ペインには、現在選択されている Action Map 内の Action と、各 Action に関連付けられているバインディングが含まれます。
- 右ペインには、現在選択されている Action または Binding のプロパティが表示されます。
以下のキーボードショートカットを使用すると、よく実行する操作をすばやく呼び出すことができます。
ショートカット (Mac) | ショートカット (Windows) | 説明 |
---|---|---|
⌘X、⌘C、⌘V | Ctrl+X、Ctrl+C、Ctrl+V | 切り取り、コピー、貼り付け。Action、Action Map、Binding で使用できます。 |
⌘D | Ctrl+D | 複製。Action、Action Map、Binding で使用できます。 |
⌘⌫ | Del | 削除。Action、Action Map、Binding で使用できます。 |
⌥S | Alt+S | 保存します。 |
⌥M | Alt+M | Action Map を追加します。 |
⌥A | Alt+A | Action を追加します。 |
⌥B | Alt+B | Binding を追加します。 |
ヒント:検索フィールドから、Device や Control Scheme を直接検索できます。例えば、"d:gamepad" を使用すると、ゲームパッド Device へのバインディングに絞り込まれ、"g:gamepad" を使用すると、"gamepad" Control Scheme 内のバインディングに絞り込まれます。照合時には、大文字と小文字が区別されず、部分一致が名前に適用されます。
Action Map の編集
- 新しい Action Map を追加するには、Action Maps 列のヘッダーにある追加 (+) アイコンを選択します。
- 既存の Action Map の名前を変更するには、名前をポイントしてマウスボタンを長押しするか、または Action Map を右クリックしてからコンテキストメニューで Rename を選択します。Action Map 名にスラッシュ (
/
) を使うことはできません。 - 既存の Action Map を削除するには、Action Map を右クリックしてからコンテキストメニューで Delete を選択するか、Del キー (Windows) または ⌘⌫ (Mac) を使用します。
- 既存の Action Map を複製するには、Action Map を右クリックしてからコンテキストメニューで Duplicate を選択するか、Ctrl+D (Windows) または ⌘D (Mac) を使用します。
Action の編集
- 新しい Action を追加するには、Actions 列のヘッダーにある追加 (+) アイコンを選択します。
- 既存の Action の名前を変更するには、名前をポイントしてマウスボタンを長押しするか、または Action を右クリックしてからコンテキストメニューで Rename を選択します。
- 既存の Action を削除するには、Action を右クリックしてからコンテキストメニューで Delete を選択するか、Del キー (Windows) または ⌘⌫ (Mac) を使用します。
- 既存の Action を複製するには、Action を右クリックしてからコンテキストメニューで Duplicate を選択するか、Ctrl+D (Windows) または ⌘D (Mac) を使用します。
Action を選択すると、ウィンドウの右側のペインでそのプロパティを編集できます。
Binding の編集
- 新しい Binding (バインディング) を追加するには、追加先のアクションにある追加 (+) アイコンを選択し、表示されたメニューからバインディングのタイプを選択します。
- 既存の Binding を削除するには、Binding を右クリックしてからコンテキストメニューで Delete を選択するか、Del キー (Windows) または ⌘⌫ (Mac) を使用します。
- 既存の Binding を複製するには、Binding を右クリックしてからコンテキストメニューで Duplicate を選択するか、Ctrl+D (Windows) または ⌘D (Mac) を使用します。
Binding を選択すると、ウィンドウの右側のペインでそのプロパティを編集できます。
Control の選択
Binding で最も重要なプロパティは、バインディング先を表す コントロールパス です。これを編集するには、Path ドロップダウンリストを開きます。これにより、Control (コントロール) のピッカーウィンドウが表示されます。
Control ピッカーウィンドウでは、Input System で認識される Input Device と Control のツリーを調べ、それらの Control にバインドすることができます。Unity では、このリストが、Action の Control Type
プロパティでフィルター処理されます。例えば、Control のタイプが Vector2
の場合は、スティックなどの 2 次元の値を生成する Control だけを選択できます。
Device と Control のツリーは、汎用的なものから限定的なものへと階層的に編成されます。例えば、Gamepad の Control パスである <Gamepad>/buttonSouth
は、任意のゲームパッドの下部に位置するアクションボタンに一致します。または、Gamepad > More Specific Gamepads に移動し、PS4 Controller を選択してから、<DualShockGamepad>/buttonSouth
という Control パスを選択した場合は、PlayStation ゲームパッドの "X" ボタンにのみ一致し、他のゲームパッドには一致しません。
目的の Control を見つけるには、ツリーをたどるよりも、Input System で入力をリッスンする方が簡単です。これを行うには、Listen ボタンを選択します。最初は、 Control のリストが空です。バインドしようとしている Devuce でボタンを押したり、Control を作動させたりすると、Control ピッカーウィンドウは、押されたコントロールに一致する Binding をリッスンし始めます。これらの Binding のいずれかを選択すると、その Binding が表示されます。
最後に、Control ピッカーを使用する代わりに、Binding パスを手動で編集することもできます。そのためには、Control パスのポップアップの横にある T ボタンを選択します。ポップアップがテキストフィールドに変わり、そこに Binding 文字列を入力できます。この場合、 Binding でワイルドカード (*
) 文字を使用することもできます。例えば、<Touchscreen>/touch0/press
、<Touchscreen>/touch1/press
などに手動でバインドする代わりに、<Touchscreen>/touch*/press
という Binding パスを使用すると、任意の指でのタッチスクリーンの押下にバインドできます。
合成 Binding の編集
合成 Binding とは、複数のパーツから成る Binding のことです。これらのパーツがまとまって、1 つの Control を形成します。例えば、2D Vector 合成 は、4 つのボタン (左、右、上、下) を使用して 2D スティックの入力をシミュレートします。詳細については、合成 Binding のドキュメントを参照してください。
合成 Binding を作成するには、Input Action Asset エディターウィンドウで、追加先の Action にある追加 (+) アイコンを選択し、ポップアップメニューから合成 Binding のタイプを選択します。
重要:メニューに表示される合成のセットは、Action の値型に基づいてフィルター処理されます。例えば、Action のタイプが "Button" に設定されている場合は、
float
型の値を返すことができる合成だけが表示されます。
これにより、Action に複数の Binding エントリーが作成されます。合成全体に対するものが 1 つ作成され、さらに合成のパーツごとに 1 つずつ、その 1 つ下のレベルに作成されます。Binding パスのプロパティは、合成自体にはありませんが、個々のパーツには存在し、他の Binding と同じように編集できます。合成のパーツをすべてバインドすると、1 つの合成として動作できるようになり、単一のコントロールを Action にバインドする場合と同様に使用できます。
合成のタイプを遡及的に変更するには、合成を選択し、Properties ペインの Composite Type ドロップダウンから新しいタイプを選択します。
特定の Binding が割り当てられている合成のパーツを変更するには、Binding のプロパティの Composite Part ドロップダウンを使用します。
同じパーツに複数の Binding を割り当てることができます。また、個々のパーツ Binding を複製することもできます。そのためには、Binding を右クリックし、Duplicate を選択して、合成に新しいパーツ Binding を作成します。例えば、1 つの合成を作成して "WASD" スタイルのコントロールと矢印キーの両方に使用する場合に、この方法を使用できます。
Control Scheme の編集
Input Action アセットには、複数の Control Scheme (コントロールスキーム) を加えることができます。これにより、さまざまな Device のタイプに応じて、異なるセットの Action Binding を有効または無効にすることができます。
Input Action Asset エディターウィンドウで Control Scheme を表示するには、ウィンドウの左上にある Control Scheme ドロップダウンリストを開きます。このメニューを使用して、アセットに Control Scheme を追加したり、削除したりできます。アセットに Control Scheme が含まれている場合は、いずれかの Control Scheme を選択すると、そのスキームに属するバインディングだけがウィンドウに表示されます。バインディングを選択すると、ウィンドウの左側の Properties ビューで、そのバインディングをアクティブにする Control Scheme を選択できます。新しい Control Scheme を追加するか、既存の Control Scheme を選択してから Edit Control Scheme… を選択すると、Control Scheme の名前およびその Scheme をアクティブにするデバイスを編集できます。
Input Action アセットの使用
Action のスクリプトコードの自動生成
スクリプトで .inputactions
アセットを使用する際に最も便利な機能の 1 つが、C# ラッパークラスの自動生成です。これにより、Action と Action Map を名前を使用して手動で検索する必要がなくなり、より簡単にコールバックを設定できるようになります。
このオプションを有効にするには、.inputactions
アセットのインスペクターで、インポーターのプロパティの Generate C# Class チェックボックスをオンにし、Apply を選択します。
必要に応じて、生成されるスクリプトのパス名、クラス名、名前空間を選択するか、デフォルト値をそのまま使用することができます。
これで、アセットの操作を簡素化する C# スクリプトが生成されます。
using UnityEngine;
using UnityEngine.InputSystem;
//IGameplayActions は、追加した "gameplay" アクションマップから生成された
//インターフェースです (アクションマップに別の名前を付けた場合はインターフェースの
//名前も変わります)。これは "Generate Interfaces" チェックボックスによって
//トリガーされました。
public class MyPlayerScript :MonoBehaviour, IGameplayActions
{
//MyPlayerControls は、Unity によって生成された C# クラスです。
//作成したアセットのデータをカプセル化し、すべてのマップと
//アクションを自動的に検索します。
MyPlayerControls controls;
public void OnEnable()
{
if (controls == null)
{
controls = new MyPlayerControls();
//アクションがトリガーされたら通知するように "gameplay"
//アクションマップに指示します。
controls.gameplay.SetCallbacks(this);
}
controls.gameplay.Enable();
}
public void OnDisable()
{
controls.gameplay.Disable();
}
public void OnUse(InputAction.CallbackContext context)
{
//"Use" のコードをここに記述します。
}
public void OnMove(InputAction.CallbackContext context)
{
//"Move" のコードをここに記述します。
}
}
ノート: .cs ファイルを再生成するには、プロジェクトブラウザーで .inputactions アセットを右クリックし、"Reimport" を選択します。
PlayerInput
での Action アセットの使用
PlayerInput
は、1 人または複数のプレイヤーの入力を処理する便利な方法を提供するコンポーネントです。これを使用する場合は、すべての Action を 1 つの Input Action アセットに設定し、そのアセットを PlayerInput
コンポーネントに割り当てます。これで、PlayerInput
が自動的に Action Map のアクティブ化と Control Scheme の選択を処理できるようになります。詳細については、入力のための GameObject コンポーネント に関するドキュメントを参照してください。
ランタイムの Input Action アセットの変更
ランタイムに Input Action アセットを変更するには、いくつかの方法があります。再生モード中に Input Action アセットに加えた変更はいずれも、再生モードの終了後に Input Action アセットに残りません。このため、アセットを誤って変更することを心配せずに、実環境と同様にエディター内でアプリケーションをテストできます。Input Action アセットを変更する方法の例については、コードでの Action の作成 および Binding の変更 に関するドキュメントを参照してください。