クロスプラットフォームの入力アクションシステムを使用すると、アクションを接続し、さまざまなハードウェア入力を通じてバインディングを整理できます。 コンテキストと組み合わせることで、プレイのあらゆるフェーズであらゆるデバイスで機能するモジュラー入力システムを簡単に構成・編集できます。 使用例には以下が含まれます:
- プレイヤーがバトルモードまたは観客モードにいるかどうかに応じて、アクションが動的に入れ替わる一人称シューティングシステム。
- 加速/減速、車のブースター、給油ステーションを備えた包括的な運転システム。
- ファイティングゲームにおけるアビリティシステムのホットキーで、プレイヤーがパンチを逃すことなく、動きをシームレスに入れ替えることができる。
入力コンテキスト
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をテストするには:
ReplicatedStorage内のPlayContextコンテキストに新しいInputActionを作成し、CharacterSprintという名前に変更してその専用アクションを示します。

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

親InputActionに割り当てられたTypeは、子InputBindingインスタンスに対して有効な一般的な入力タイプ(キー/ボタン/タップ、アナログトリガー、スティックなど)に直接影響します。さらに、親アクションの接続されたイベントに送信される値は、バインディングの選択された入力タイプによって異なります。アクションタイプ、バインディング、および返却値との相関関係の詳細については入力イベントを参照してください。
簡単なキャラクタースプリントのためにバインディングを設定するには:
CharacterSprintアクションに新しいInputBindingを挿入し、KeyboardBindingにリネームします。その後、バインディングのKeyCodeプロパティをLeftShiftに設定します。


マウスのShiftロックがキーのバインディングに干渉しないように、Explorer内のStarterPlayerを選択し、プロパティウィンドウでそのEnableMouseLockOptionを無効にします。


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イベントに返される値 |
|---|---|
| キーボードのキーや基本的なマウス/ゲームパッドボタンからのBoolean入力、またはバインディングのUIButtonプロパティを通してのGuiButtonの押下/解放。 |
|
| バインディングのKeyCodeプロパティを通したアナログ入力からの可変入力量(ゲームパッドトリガーButtonL2/ButtonR2など)。 |
|
簡単なキャラクタースプリントのためにイベントを接続するには:
CharacterSprintツリーに新しいScriptを挿入し、さまざまな入力バインディングの横に配置します。その後、そのRunContextをClientに設定し、名前をOnActivateに変更します。

OnActivateスクリプトに以下のコードを貼り付けます。行13‑15のPressedイベント接続に注意してください。これは、スプリント入力バインディングが押されたときにキャラクターの移動速度を2倍にし、スプリント入力バインディングが解放されたときに移動速度をデフォルトにリセットします。
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のような入力コンテキストを持っていると、ゲームプレイ中にスクリプトを通じてそれを有効化/無効化したり、優先順位を判定して他のアクションの優先度を変更したり、低優先度のコンテキスト内での処理を防ぐために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)
デフォルトバインディング
Robloxは、移動、カメラ操作、および基本的な環境との相互作用のためのデフォルトの入力バインディングを提供します — Robloxプレイヤーはこれらの操作に慣れていますので、特定のケースでのみそれらをオーバーライドする必要があります。また、予約済みの入力はオーバーライドすることができず、常にその意図された目的で機能します。
| アクション | マウス/キーボード | ゲームパッド | タッチ |
|---|---|---|---|
| Robloxメニューを開く | Esc | Startボタン (ButtonStart) | 該当なし |
| デベロッパーコンソール | F9 | 該当なし | 該当なし |
| 全画面モード (Windows) デスクトップ表示 (Mac) | F11 | 該当なし | 該当なし |
| ビデオを録画 (Windows) | F12 | 該当なし | 該当なし |
| スクリーンショットを撮る | PrintScreen | 該当なし | 該当なし |



