入力アクションシステム

*このコンテンツは、ベータ版のAI(人工知能)を使用して翻訳されており、エラーが含まれている可能性があります。このページを英語で表示するには、 こちら をクリックしてください。

クロスプラットフォームの入力アクションシステムを使用すると、アクションを接続し、さまざまなハードウェア入力に対してバインディングを整理できます。 コンテキストと組み合わせることで、プレイのどのフェーズでも、どのデバイスでも機能するモジュラー入力システムを簡単に構成および編集できます。 使用例には以下が含まれます:

  • プレイヤーがバトルモードまたは観客モードにいるかどうかに応じて、アクションが動的に入れ替わる一人称シューティングシステム。
  • 加速/減速、車のブースター、給油ステーションを備えた包括的な運転システム。
  • 格闘ゲームのアビリティシステムのホットキーで、プレイヤーがパンチを逃すことなく動きをシームレスに入れ替えます。

入力コンテキスト

InputContextは、関連する入力アクションを保持するアクションのコレクションです。たとえば、ゲーム内キャラクターの操作用のPlayContextや、UIメニューをナビゲートするための操作用のNavContextがあります。 Enabledプロパティを介してコンテキストを有効/無効にすることができ、たとえば、インベントリメニューが開いているときにNavContextを有効にし、プレイヤーがメニューを閉じて主要なゲームプレイに戻るときにPlayContextに切り替えることができます。

ゲームが最初に複数の入力コンテキストを使用しない場合でも、入力システムの最上位レベルにプライマリコンテキストを作成することをお勧めします。たとえば、ゲームプレイ中に発生する入力用のPlayContextインスタンスです。

  1. 推奨
    ReplicatedStorage内にInputsという名前のFolderを作成して、さまざまな入力コンテキストを保持します。

    ReplicatedStorage内の新しいフォルダー、Inputsに名前変更
  2. フォルダーに新しいInputContextを挿入し、名前をPlayContextに変更します。

    ReplicatedStorage内の新しいInputContextインスタンス、PlayContextに名前変更
  3. オプション
    プロパティウィンドウで、Priority2000に設定し、Sinkを有効にします。Sinkが有効なコンテキストは、その優先度レベルでバインドされたKeyCodesの入力イベントを消費し、低優先度のコンテキストに到達するのをブロックします。これは、特定のゲームプレイ入力を抑制する必要があるインベントリ画面などの使用例に便利です。この例では、PlayContextに十分な高いPriorityが与えられ、デフォルトのPlayerScriptsコンテキストがそれらを処理する前にバインドされた入力を沈めます。

    Priorityが2000に設定され、Sinkが有効なInputContext

入力アクション

InputActionは、「ジャンプ」、「スプリント」、「射撃」などのゲームプレイアクションメカニクスを定義します。これらのアクションは、入力バインディングを使用してハードウェア入力にマッピングされます。

InputActionは、そのTypeプロパティ(Enum.InputActionType)に応じて、いくつかのバリエーションを持つことができます。デフォルトはBoolで、ButtonAE、またはMouseLeftButtonなどの入力の押下/解放からtrue/falseの値を受け取るように設計されています。

入力アクションタイプ使用例
Boolジャンプ、射撃、スプリントなどのトリガーされたアクションで、アナログ入力の押下/解放のしきい値をサポートします。
Direction1D車のアクセルペダルやビューのズームレベルなど、変動するゼロからフルのアクション。
Direction2Dカメラの回転や標準のRobloxキャラクターの移動など、2Dの方向性の動き。
Direction3D上下に浮遊し、加速/減速し、左右にドリフトできる空中の車両のような3Dの方向性の動き。
ViewportPositionマウス入力のような2Dビューポート座標で、カスタムカーソルやレイキャスティングを使用してワールドオブジェクトを選択するために使用されます。

シンプルなキャラクターのスプリント用のInputActionをテストするには:

  1. 推奨
    Explorerで最上位のWorkspaceオブジェクトを選択し、プロパティウィンドウでPlayerScriptsUseInputActionSystemプロパティをEnabledに設定します。

  2. ReplicatedStorage内のPlayContextコンテキストに新しいInputActionを作成します。専用のアクションを示すために、名前をCharacterSprintに変更します。

    InputContext内の新しいInputActionインスタンス、CharacterSprintに名前変更
  3. プロパティウィンドウで、アクションのTypeBool(デフォルト)であることに注意してください。これは、キャラクターがスプリントしているかどうかのブール値true/falseアクションとしてシンプルなキャラクターのスプリントに適した論理タイプです。

    InputActionのTypeプロパティがBoolに設定されている

入力バインディング

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

Robloxは、移動、カメラ操作、および基本的な環境との相互作用のためのデフォルトの入力バインディングを提供します — Robloxプレイヤーはこれらの操作に慣れていますので、特定のケースでのみそれらをオーバーライドする必要があります。また、予約済みの入力はオーバーライドすることができず、常にその意図された目的で機能します。

アクションマウス/キーボードゲームパッドタッチ
Robloxメニューを開くEscStartボタン (ButtonStart)該当なし
デベロッパーコンソールF9該当なし該当なし
全画面モード (Windows)
デスクトップ表示 (Mac)
F11該当なし該当なし
ビデオを録画 (Windows)F12該当なし該当なし
スクリーンショットを撮るPrintScreen該当なし該当なし

親のInputActionに割り当てられたTypeは、子のInputBindingインスタンスに対して有効な一般的な入力タイプ(キー/ボタン/タップ、アナログトリガー、スティックなど)に直接影響します。さらに、親アクションの接続されたイベントに送信される値は、バインディングの選択された入力タイプに依存します。アクションタイプ、バインディング、および戻り値の相関関係の詳細については、入力イベントを参照してください。

シンプルなキャラクターのスプリント用のバインディングを接続するには:

  1. CharacterSprintアクションに新しいInputBindingを挿入し、名前をKeyboardBindingに変更します。次に、バインディングのKeyCodeプロパティをLeftShiftに設定します。

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

  3. StarterGui内のScreenGuiコンテナに画面上のボタンを作成し、名前をSprintButtonに変更し、位置/サイズを希望通りに設定します。

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

入力イベント

InputActionインスタンスには、InputBindingsからのプレイヤー入力を処理するための3つの組み込みイベントがあります。

  • Pressed — このイベントは、入力アクションのTypeBoolに設定されているときのみ発火し、状態がfalseからtrueに遷移したときのみ発火します。
  • Released — このイベントは、入力アクションのTypeBoolに設定されているときのみ発火し、状態がtrueからfalseに遷移したときのみ発火します。
  • StateChanged — このイベントは、状態が変化するたびにすべての入力アクションタイプに対して発火します。ただし、状態が同じ状態に遷移しようとする場合は発火しません。

入力アクションのTypeBoolDirection1DDirection2DDirection3D、またはViewportPosition)と、子のInputBindingからの一般的な入力タイプ(キー/ボタン/タップ、アナログトリガー、スティックなど)に応じて、PressedReleased、およびStateChangedイベントハンドラーに返される値が異なります。相関関係をよりよく理解するために、以下の表を確認してください。

Boolタイプは、ジャンプ、射撃、スプリントなどのトリガーされたアクションに最適で、アナログ入力の押下/解放のしきい値をサポートします。

InputBindingsでの有効な入力タイプInputActionイベントに返される値
バインディングのKeyCodeプロパティを介して、キーボードキーや基本的なマウス/ゲームパッドボタンからのブール入力、またはバインディングのUIButtonプロパティを介してGuiButtonの押下/解放。
  • Pressedイベント:
    • 押下時にtrue
  • Releasedイベント:
    • 解放時にtrue
  • StateChangedイベント:
    • true(押下)またはfalse(解放)
バインディングのKeyCodeプロパティを介して、ゲームパッドトリガー(ButtonL2/ButtonR2)からのアナログ入力の変動量。

シンプルなキャラクターのスプリント用のイベントを接続するには:

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

  2. OnActivateスクリプトに以下のコードを貼り付けます。行1315Pressedイベント接続に注意してください。これは、スプリント入力バインディングが押下されたときにキャラクターの歩行速度を2倍にし、行1618の対応するReleasedイベント接続は、スプリント入力バインディングが解放されたときに歩行速度をデフォルトにリセットします。

    OnActivate (クライアントスクリプト)
    local Players = game:GetService("Players")
    local player = Players.LocalPlayer
    local character = player.Character
    if not character or character.Parent == nil then
    character = player.CharacterAdded:Wait()
    end
    local humanoid = character:WaitForChild("Humanoid")
    local defaultWalkSpeed = humanoid.WalkSpeed
    local inputAction = script.Parent
    inputAction.Pressed:Connect(function()
    humanoid.WalkSpeed = defaultWalkSpeed * 2
    end)
    inputAction.Released:Connect(function()
    humanoid.WalkSpeed = defaultWalkSpeed
    end)
  3. ゲームをプレイテストし、以前に選択したバインディングでキャラクターのスプリントアクションをテストします:キーボード用のLeftShift、ゲームパッド用のButtonY、およびタッチ対応デバイス用の画面上のSprintButton。ゲームパッド入力を直接Roblox Studioでテストするには、コントローラーエミュレーターを使用できることを忘れないでください。

コンテキストの変更

PlayContextのような入力コンテキストを持っている場合、スクリプトを介してゲームプレイ中にそれを有効/無効にしたり、Priorityを変更して、どのアクションが他のアクションよりも優先されるかを決定したり、Sinkを使用して低優先度のコンテキスト内で処理される入力を防ぐことができます。

  1. 他のスクリプトからコンテキストを切り替えやすくするために、ReplicatedStorage内の入力フォルダーに新しいBindableEventを挿入し、名前をContextEventに変更します。

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

  3. 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 then
    context.Enabled = enabled
    print(context.Name .. ": " .. tostring(context.Enabled))
    else
    warn("InputContextが見つかりません!")
    end
    end)
  4. UpdateContextスクリプトが配置されると、バインダブルイベントを発火させることで、名前付きのInputContextを更新できるようになります。たとえば、ScreenGui内のGuiButtonを駆動するLocalScriptから発火させることができます。

    ボタンスクリプト
    local ReplicatedStorage = game:GetService("ReplicatedStorage")
    local inputsFolder = ReplicatedStorage:WaitForChild("Inputs")
    local contextEvent = inputsFolder:WaitForChild("ContextEvent")
    local button = script.Parent
    button.Activated:Connect(function()
    -- ターゲット入力コンテキストと有効状態でバインダブルイベントを発火
    contextEvent:Fire("PlayContext", true)
    end)

入力アクションマネージャー

入力アクションマネージャーツールは、入力アーキテクチャを設計、監査、スケールするための統一されたマトリックススタイルのインターフェースです。

アクセスするには、Studioのウィンドウメニューに移動し、入力 ⟩ 入力アクションマネージャーを選択します。ゲームがすでに入力のコンテキストアクション、またはバインディングを使用している場合、マネージャーは自動的にDataModelをスキャンし、既存のインスタンスをエディターグリッドに抽出します。新しい入力関連のインスタンスは、ReplicatedStorage内のInputsフォルダーに自動的に追加されます。

ReplicatedStorage内のInputsという名前のフォルダー

上記のセクションで説明したキャラクターのスプリント用の入力セットアップを構成するには:

  1. 推奨
    Explorerで最上位のWorkspaceオブジェクトを選択し、プロパティウィンドウでPlayerScriptsUseInputActionSystemプロパティをEnabledに設定します。

  2. StarterGui内のScreenGuiコンテナに画面上のボタンを作成し、名前をSprintButtonに変更し、位置/サイズを希望通りに設定します。

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

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

    InputContext内の新しいInputActionインスタンス、CharacterSprintに名前変更
  5. 新しいCharacterSprint行で、各入力タイプのバインディングを割り当てます:

    1. キーボードとマウス — 矢印ボタンをクリックし、ピッカー メニューからLeftShiftを選択します。
    2. タッチ — セルをクリックし、Explorer階層で、以前にScreenGuiに挿入したSprintButtonオブジェクトをクリックします。
    3. ゲームパッド — 矢印ボタンをクリックし、ピッカー メニューからButtonYを選択します。
  6. CharacterSprintツリーに新しいScriptを挿入し、さまざまな入力バインディングの横に配置します。次に、RunContextClientに設定し、名前をOnActivateに変更します。

  7. OnActivateスクリプトに以下のコードを貼り付けます。行1315Pressedイベント接続に注意してください。これは、スプリント入力バインディングが押下されたときにキャラクターの歩行速度を2倍にし、行1618の対応するReleasedイベント接続は、スプリント入力バインディングが解放されたときに歩行速度をデフォルトにリセットします。

    OnActivate (クライアントスクリプト)
    local Players = game:GetService("Players")
    local player = Players.LocalPlayer
    local character = player.Character
    if not character or character.Parent == nil then
    character = player.CharacterAdded:Wait()
    end
    local humanoid = character:WaitForChild("Humanoid")
    local defaultWalkSpeed = humanoid.WalkSpeed
    local inputAction = script.Parent
    inputAction.Pressed:Connect(function()
    humanoid.WalkSpeed = defaultWalkSpeed * 2
    end)
    inputAction.Released:Connect(function()
    humanoid.WalkSpeed = defaultWalkSpeed
    end)
©2026 Roblox Corporation。Roblox(ロブロックス)、RobloxロゴおよびPowering Imaginationは、米国並びにその他の国における登録商標および非登録商標です。