入力アクションシステム

*このコンテンツは、ベータ版の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コンテキストがそれらを処理する前に、バインドされた入力を沈めます。

入力アクション

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

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

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

簡単なキャラクタースプリントのためにInputActionをテストするには:

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

    InputContext内に新しいInputActionインスタンスを作成し、CharacterSprintにリネーム
  2. プロパティウィンドウで、アクションのTypeBool(デフォルト)であることに注意してください。これは、キャラクタースプリントのために論理的なタイプで、Booleanのtrue/falseアクション(キャラクターはスプリントしているか、スプリントしていないか)です。

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

入力バインディング

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

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

簡単なキャラクタースプリントのためにバインディングを設定するには:

  1. CharacterSprintアクションに新しいInputBindingを挿入し、KeyboardBindingにリネームします。その後、バインディングのKeyCodeプロパティをLeftShiftに設定します。

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

  3. CharacterSprintアクションに2つ目のInputBindingを挿入し、GamepadBindingにリネームします。その後、バインディングのKeyCodeプロパティをButtonYに設定します。

  4. StarterGui内のScreenGuiコンテナにオンスクリーンボタンを作成し、名前をSprintButtonに変更し、希望の位置/サイズを設定/調整します。

  5. 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イベントに返される値
キーボードのキーや基本的なマウス/ゲームパッドボタンからのBoolean入力、またはバインディングのUIButtonプロパティを通してのGuiButtonの押下/解放。
バインディングのKeyCodeプロパティを通したアナログ入力からの可変入力量(ゲームパッドトリガーButtonL2/ButtonR2など)。

簡単なキャラクタースプリントのためにイベントを接続するには:

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

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

    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のような入力コンテキストを持っていると、ゲームプレイ中にスクリプトを通じてそれを有効化/無効化したり、優先順位を判定して他のアクションの優先度を変更したり、低優先度のコンテキスト内での処理を防ぐために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)

デフォルトバインディング

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

アクションマウス/キーボードゲームパッドタッチ
Robloxメニューを開くEscStartボタン (ButtonStart)該当なし
デベロッパーコンソールF9該当なし該当なし
全画面モード (Windows)
デスクトップ表示 (Mac)
F11該当なし該当なし
ビデオを録画 (Windows)F12該当なし該当なし
スクリーンショットを撮るPrintScreen該当なし該当なし
©2026 Roblox Corporation。Roblox(ロブロックス)、RobloxロゴおよびPowering Imaginationは、米国並びにその他の国における登録商標および非登録商標です。