ユーザー入力の検出

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

ユーザー入力をアクションに接続することで、ユーザーはゲームの機能をより良く、直感的に制御できるようになります。このチュートリアルでは、特定のキーにリロードアクションをバインドします。

始めに

このチュートリアルでは、プレイヤーツールの作成で作成されたブラスターツールを使用します。ツールを作成する手順に従うか、ブラスターモデルをダウンロードしてStarterPackに挿入できます。

モデルは、任意のゲーム間で使用するためにインベントリに追加できます。ゲームにモデルを追加するには:

  1. ブラウザでモデルページを開き、取得ボタンをクリックします。これにより、モデルがインベントリに追加されます。
  2. スタジオのウィンドウメニューまたはホームタブツールバーからツールボックスを開き、インベントリタブを選択します。
  3. ドロップダウンがマイモデルに設定されていることを確認します。
  4. ブラスターモデルを選択してゲームに追加します。

アクションハンドラーを作成する

まず、ユーザー入力が検出されたときに処理する関数が必要です。

  1. ブラスター内のToolController LocalScriptを開きます。

    ブラスターツール内のToolControllerスクリプトが選択されているExplorerのビュー

  2. アクションの名前を格納するための変数を作成します。

    local tool = script.Parent
    local RELOAD_ACTION = "reloadWeapon"
    local function toolEquipped()
    tool.Handle.Equip:Play()
    end
    local function toolActivated()
    tool.Handle.Activate:Play()
    end
    tool.Equipped:Connect(toolEquipped)
    tool.Activated:Connect(toolActivated)
  3. actionNameinputStateinputObjectの3つの引数を受け取るonActionという名前の関数を作成します。これは、ユーザー入力が検出されたときに実行される関数になります。

    local tool = script.Parent
    local RELOAD_ACTION = "reloadWeapon"
    local function onAction(actionName, inputState, inputObject)
    end
    local function toolEquipped()
    tool.Handle.Equip:Play()
    end
  4. 関数内で、与えられたactionNameがリロードアクション名と一致するか確認し、inputStateUserInputState.Begin(開始状態)であることを確認します。これは重要です。なぜなら、inputStateが変わるたびに関数が実行されますが、リロードは一度だけ行う必要があるからです。

    local function onAction(actionName, inputState, inputObject)
    if actionName == RELOAD_ACTION and inputState == Enum.UserInputState.Begin then
    end
    end
  5. ユーザーがリロードしたときに明確にするために、ツールのTextureIdを一時的に"rbxassetid://6593020923"に変更し、その後元の値"rbxassetid://92628145"に戻します。

    local function onAction(actionName, inputState, inputObject)
    if actionName == RELOAD_ACTION and inputState == Enum.UserInputState.Begin then
    tool.TextureId = "rbxassetid://6593020923"
    task.wait(2)
    tool.TextureId = "rbxassetid://92628145"
    end
    end

アクションをバインドする

ContextActionServiceを使用して、特定の入力に関数をバインドできます。これは、BindAction関数を使用して行い、いくつかの引数を受け取ります:

  • アクションの名前。
  • アクションを処理する関数(コールバックとも呼ばれます)。
  • タッチボタンを表示するかどうか。
  • アクションに関連付けるEnum.KeyCodesの任意の数。

KeyCodesは、キーボードのキーやコントローラーのボタンなど、異なる入力ボタンを表す値です。コードの完全なリストはこちらで入手できます。

  1. スクリプトの先頭でContextActionServiceを取得します。

    local ContextActionService = game:GetService("ContextActionService")
    local tool = script.Parent
    local RELOAD_ACTION = "reloadWeapon"
  2. toolEquipped関数内で、BindActionを呼び出し、次の引数を渡します:

    • アクションの名前(RELOAD_ACTION
    • アクションハンドラー(onAction
    • タッチボタンを作成するための値(true
    • 検出するキー入力(Enum.KeyCode.R
    local RELOAD_ACTION = "reloadWeapon"
    local function onAction(actionName, inputState, inputObject)
    if actionName == RELOAD_ACTION and inputState == Enum.UserInputState.Begin then
    tool.TextureId = "rbxassetid://6593020923"
    task.wait(2)
    tool.TextureId = "rbxassetid://92628145"
    end
    end
    local function toolEquipped()
    ContextActionService:BindAction(RELOAD_ACTION, onAction, true, Enum.KeyCode.R)
    tool.Handle.Equip:Play()
    end
  3. ツールを装備し、キーボードのRキーを押してプレイテストします。バックパックアイコンは、武器がリロード中であることを示す待機シンボルに一時的に変更されるはずです:

アクションのバインド解除

ユーザーがツールの装備を解除したとき、アクションはバインド解除される必要があります。そうしないと、ツールが装備されていない状態でリロードできてしまいます。

  1. toolUnequippedという新しい関数を作成し、アクション名を渡してUnbindActionを呼び出します。

    local function toolEquipped()
    ContextActionService:BindAction(RELOAD_ACTION, onAction, true, Enum.KeyCode.R)
    tool.Handle.Equip:Play()
    end
    local function toolUnequipped()
    ContextActionService:UnbindAction(RELOAD_ACTION)
    end
    local function toolActivated()
    tool.Handle.Activate:Play()
    end
    tool.Equipped:Connect(toolEquipped)
    tool.Activated:Connect(toolActivated)
  2. toolUnequipped関数をUnequippedイベントに接続し、イベントが発火したときに関数が実行されるようにします。

    local ContextActionService = game:GetService("ContextActionService")
    local tool = script.Parent
    local RELOAD_ACTION = "reloadWeapon"
    local function onAction(actionName, inputState, inputObject)
    if actionName == RELOAD_ACTION and inputState == Enum.UserInputState.Begin then
    tool.TextureId = "rbxassetid://6593020923"
    task.wait(2)
    tool.TextureId = "rbxassetid://92628145"
    end
    end
    local function toolEquipped()
    ContextActionService:BindAction(RELOAD_ACTION, onAction, true, Enum.KeyCode.R)
    tool.Handle.Equip:Play()
    end
    local function toolUnequipped()
    ContextActionService:UnbindAction(RELOAD_ACTION)
    end
    local function toolActivated()
    tool.Handle.Activate:Play()
    end
    tool.Equipped:Connect(toolEquipped)
    tool.Unequipped:Connect(toolUnequipped)
    tool.Activated:Connect(toolActivated)
  3. プレイテストを行い、すべてが正しく機能することを確認します。ツールが装備されているときはリロードできるが、装備されていないときはリロードできないはずです。

リロードアニメーションはこれで完成です - 追加のチャレンジとして、ブラスターが発射されるたびに弾薬カウンターをカウントダウンしてみてください。その後、弾薬がないときにtoolActivated関数を無効にし、リロードアニメーションが終了したら再度有効にします。

©2026 Roblox Corporation。Roblox(ロブロックス)、RobloxロゴおよびPowering Imaginationは、米国並びにその他の国における登録商標および非登録商標です。