始める
中級者向けチュートリアル

ユーザー入力を検出する

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

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

はじめに

このチュートリアルでは、Create Player Toolsで作成されたBlasterツールを使用します。これらの手順に従ってツールを作成するか、BlasterモデルをダウンロードしてStarterPackに挿入できます。

モデルは、任意の体験の間で使用するためにインベントリに追加できます。モデルを体験に追加するには、以下の手順を行います。

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

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

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

  1. BlasterのToolController LocalScriptを開きます。

    Blasterツール内の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は、米国並びにその他の国における登録商標および非登録商標です。