クロスプラットフォームの入力アクションシステムを使用すると、アクションを接続し、さまざまなハードウェア入力に対してバインディングを整理できます。 コンテキストと組み合わせることで、プレイのどのフェーズでも、どのデバイスでも機能するモジュラー入力システムを簡単に構成および編集できます。 使用例には以下が含まれます:
- プレイヤーがバトルモードまたは観客モードにいるかどうかに応じて、アクションが動的に入れ替わる一人称シューティングシステム。
- 加速/減速、車のブースター、給油ステーションを備えた包括的な運転システム。
- 格闘ゲームのアビリティシステムのホットキーで、プレイヤーがパンチを逃すことなく動きをシームレスに入れ替えます。
入力コンテキスト
InputContextは、関連する入力アクションを保持するアクションのコレクションです。たとえば、ゲーム内キャラクターの操作用のPlayContextや、UIメニューをナビゲートするための操作用のNavContextがあります。 Enabledプロパティを介してコンテキストを有効/無効にすることができ、たとえば、インベントリメニューが開いているときにNavContextを有効にし、プレイヤーがメニューを閉じて主要なゲームプレイに戻るときにPlayContextに切り替えることができます。
ゲームが最初に複数の入力コンテキストを使用しない場合でも、入力システムの最上位レベルにプライマリコンテキストを作成することをお勧めします。たとえば、ゲームプレイ中に発生する入力用のPlayContextインスタンスです。
フォルダーに新しいInputContextを挿入し、名前をPlayContextに変更します。

入力アクション
InputActionは、「ジャンプ」、「スプリント」、「射撃」などのゲームプレイアクションメカニクスを定義します。これらのアクションは、入力バインディングを使用してハードウェア入力にマッピングされます。
InputActionは、そのTypeプロパティ(Enum.InputActionType)に応じて、いくつかのバリエーションを持つことができます。デフォルトはBoolで、ButtonA、E、またはMouseLeftButtonなどの入力の押下/解放からtrue/falseの値を受け取るように設計されています。
| 入力アクションタイプ | 使用例 |
|---|---|
| Bool | ジャンプ、射撃、スプリントなどのトリガーされたアクションで、アナログ入力の押下/解放のしきい値をサポートします。 |
| Direction1D | 車のアクセルペダルやビューのズームレベルなど、変動するゼロからフルのアクション。 |
| Direction2D | カメラの回転や標準のRobloxキャラクターの移動など、2Dの方向性の動き。 |
| Direction3D | 上下に浮遊し、加速/減速し、左右にドリフトできる空中の車両のような3Dの方向性の動き。 |
| ViewportPosition | マウス入力のような2Dビューポート座標で、カスタムカーソルやレイキャスティングを使用してワールドオブジェクトを選択するために使用されます。 |
シンプルなキャラクターのスプリント用のInputActionをテストするには:
- 推奨Explorerで最上位のWorkspaceオブジェクトを選択し、プロパティウィンドウでPlayerScriptsUseInputActionSystemプロパティをEnabledに設定します。
ReplicatedStorage内のPlayContextコンテキストに新しいInputActionを作成します。専用のアクションを示すために、名前をCharacterSprintに変更します。

入力バインディング
InputBindingは、親のInputActionをトリガーするハードウェアバインディングを定義します。たとえば、キーの押下、ゲームパッドのボタン、またはタッチ対応デバイスでのタップです。 クロスプラットフォームの互換性のために、各InputActionには、ゲームパッド、キーボード/マウス、およびタッチのためのInputBindingが必要です。

Robloxは、移動、カメラ操作、および基本的な環境との相互作用のためのデフォルトの入力バインディングを提供します — Robloxプレイヤーはこれらの操作に慣れていますので、特定のケースでのみそれらをオーバーライドする必要があります。また、予約済みの入力はオーバーライドすることができず、常にその意図された目的で機能します。
| アクション | マウス/キーボード | ゲームパッド | タッチ |
|---|---|---|---|
| Robloxメニューを開く | Esc | Startボタン (ButtonStart) | 該当なし |
| デベロッパーコンソール | F9 | 該当なし | 該当なし |
| 全画面モード (Windows) デスクトップ表示 (Mac) | F11 | 該当なし | 該当なし |
| ビデオを録画 (Windows) | F12 | 該当なし | 該当なし |
| スクリーンショットを撮る | PrintScreen | 該当なし | 該当なし |
親のInputActionに割り当てられたTypeは、子のInputBindingインスタンスに対して有効な一般的な入力タイプ(キー/ボタン/タップ、アナログトリガー、スティックなど)に直接影響します。さらに、親アクションの接続されたイベントに送信される値は、バインディングの選択された入力タイプに依存します。アクションタイプ、バインディング、および戻り値の相関関係の詳細については、入力イベントを参照してください。
シンプルなキャラクターのスプリント用のバインディングを接続するには:
CharacterSprintアクションに新しいInputBindingを挿入し、名前をKeyboardBindingに変更します。次に、バインディングのKeyCodeプロパティをLeftShiftに設定します。


CharacterSprintアクションに2つ目のInputBindingを挿入し、名前をGamepadBindingに変更します。次に、バインディングのKeyCodeプロパティをButtonYに設定します。


CharacterSprintアクションに3つ目のInputBindingを挿入し、名前をTouchBindingに変更します。次に、プロパティウィンドウで、バインディングのUIButtonプロパティを、以前にStarterGui内に作成したSprintButtonボタンにリンクします。


入力イベント
InputActionインスタンスには、InputBindingsからのプレイヤー入力を処理するための3つの組み込みイベントがあります。
- StateChanged — このイベントは、状態が変化するたびにすべての入力アクションタイプに対して発火します。ただし、状態が同じ状態に遷移しようとする場合は発火しません。
入力アクションのType(Bool、Direction1D、Direction2D、Direction3D、またはViewportPosition)と、子のInputBindingからの一般的な入力タイプ(キー/ボタン/タップ、アナログトリガー、スティックなど)に応じて、Pressed、Released、およびStateChangedイベントハンドラーに返される値が異なります。相関関係をよりよく理解するために、以下の表を確認してください。
Boolタイプは、ジャンプ、射撃、スプリントなどのトリガーされたアクションに最適で、アナログ入力の押下/解放のしきい値をサポートします。
| InputBindingsでの有効な入力タイプ | InputActionイベントに返される値 |
|---|---|
| バインディングのKeyCodeプロパティを介して、キーボードキーや基本的なマウス/ゲームパッドボタンからのブール入力、またはバインディングのUIButtonプロパティを介してGuiButtonの押下/解放。 |
|
| バインディングのKeyCodeプロパティを介して、ゲームパッドトリガー(ButtonL2/ButtonR2)からのアナログ入力の変動量。 |
|
シンプルなキャラクターのスプリント用のイベントを接続するには:
CharacterSprintツリーに新しいScriptを挿入し、さまざまな入力バインディングの横に配置します。次に、RunContextをClientに設定し、名前をOnActivateに変更します。

OnActivateスクリプトに以下のコードを貼り付けます。行13〜15のPressedイベント接続に注意してください。これは、スプリント入力バインディングが押下されたときにキャラクターの歩行速度を2倍にし、行16〜18の対応するReleasedイベント接続は、スプリント入力バインディングが解放されたときに歩行速度をデフォルトにリセットします。
OnActivate (クライアントスクリプト)local Players = game:GetService("Players")local player = Players.LocalPlayerlocal character = player.Characterif not character or character.Parent == nil thencharacter = player.CharacterAdded:Wait()endlocal humanoid = character:WaitForChild("Humanoid")local defaultWalkSpeed = humanoid.WalkSpeedlocal inputAction = script.ParentinputAction.Pressed:Connect(function()humanoid.WalkSpeed = defaultWalkSpeed * 2end)inputAction.Released:Connect(function()humanoid.WalkSpeed = defaultWalkSpeedend)ゲームをプレイテストし、以前に選択したバインディングでキャラクターのスプリントアクションをテストします:キーボード用のLeftShift、ゲームパッド用のButtonY、およびタッチ対応デバイス用の画面上のSprintButton。ゲームパッド入力を直接Roblox Studioでテストするには、コントローラーエミュレーターを使用できることを忘れないでください。
コンテキストの変更
PlayContextのような入力コンテキストを持っている場合、スクリプトを介してゲームプレイ中にそれを有効/無効にしたり、Priorityを変更して、どのアクションが他のアクションよりも優先されるかを決定したり、Sinkを使用して低優先度のコンテキスト内で処理される入力を防ぐことができます。
他のスクリプトからコンテキストを切り替えやすくするために、ReplicatedStorage内の入力フォルダーに新しいBindableEventを挿入し、名前をContextEventに変更します。

同じレベルに新しいScriptを作成し、RunContextをClientに設定し、名前をUpdateContextに変更します。

UpdateContextスクリプト内に以下のコードを貼り付けます。
UpdateContext (クライアントスクリプト)local ReplicatedStorage = game:GetService("ReplicatedStorage")local inputsFolder = ReplicatedStorage:WaitForChild("Inputs")local contextEvent = inputsFolder:WaitForChild("ContextEvent")-- バインダブルイベントを接続contextEvent.Event:Connect(function(targetContext, enabled)local context = inputsFolder:FindFirstChild(targetContext)if context thencontext.Enabled = enabledprint(context.Name .. ": " .. tostring(context.Enabled))elsewarn("InputContextが見つかりません!")endend)UpdateContextスクリプトが配置されると、バインダブルイベントを発火させることで、名前付きのInputContextを更新できるようになります。たとえば、ScreenGui内のGuiButtonを駆動するLocalScriptから発火させることができます。
ボタンスクリプトlocal ReplicatedStorage = game:GetService("ReplicatedStorage")local inputsFolder = ReplicatedStorage:WaitForChild("Inputs")local contextEvent = inputsFolder:WaitForChild("ContextEvent")local button = script.Parentbutton.Activated:Connect(function()-- ターゲット入力コンテキストと有効状態でバインダブルイベントを発火contextEvent:Fire("PlayContext", true)end)
入力アクションマネージャー
入力アクションマネージャーツールは、入力アーキテクチャを設計、監査、スケールするための統一されたマトリックススタイルのインターフェースです。
アクセスするには、Studioのウィンドウメニューに移動し、入力 ⟩ 入力アクションマネージャーを選択します。ゲームがすでに入力のコンテキスト、アクション、またはバインディングを使用している場合、マネージャーは自動的にDataModelをスキャンし、既存のインスタンスをエディターグリッドに抽出します。新しい入力関連のインスタンスは、ReplicatedStorage内のInputsフォルダーに自動的に追加されます。

上記のセクションで説明したキャラクターのスプリント用の入力セットアップを構成するには:
- 推奨Explorerで最上位のWorkspaceオブジェクトを選択し、プロパティウィンドウでPlayerScriptsUseInputActionSystemプロパティをEnabledに設定します。
StarterGui内のScreenGuiコンテナに画面上のボタンを作成し、名前をSprintButtonに変更し、位置/サイズを希望通りに設定します。

入力アクションマネージャーで、コンテキスト列のヘッダーにカーソルを合わせ、**+**ボタンをクリックします。新しいコンテキストに適切な名前(たとえばPlayContext)を入力し、Enterを押します。対応する名前のInputContextがReplicatedStorageに表示されます。


新しいコンテキストにカーソルを合わせて**+**ボタンをクリックします。ポップアップメニューからBoolを選択し、アクションの名前にCharacterSprintを入力してEnterを押します。対応する名前のInputActionがコンテキストの下に表示されます。


CharacterSprintツリーに新しいScriptを挿入し、さまざまな入力バインディングの横に配置します。次に、RunContextをClientに設定し、名前をOnActivateに変更します。

OnActivateスクリプトに以下のコードを貼り付けます。行13〜15のPressedイベント接続に注意してください。これは、スプリント入力バインディングが押下されたときにキャラクターの歩行速度を2倍にし、行16〜18の対応するReleasedイベント接続は、スプリント入力バインディングが解放されたときに歩行速度をデフォルトにリセットします。
OnActivate (クライアントスクリプト)local Players = game:GetService("Players")local player = Players.LocalPlayerlocal character = player.Characterif not character or character.Parent == nil thencharacter = player.CharacterAdded:Wait()endlocal humanoid = character:WaitForChild("Humanoid")local defaultWalkSpeed = humanoid.WalkSpeedlocal inputAction = script.ParentinputAction.Pressed:Connect(function()humanoid.WalkSpeed = defaultWalkSpeed * 2end)inputAction.Released:Connect(function()humanoid.WalkSpeed = defaultWalkSpeedend)



