ユーザーの入力を検出

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

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

始める

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

モデルは、どのエクスペリエンス間でも使用できるように、インベントリに追加できます。モデルをエクスペリエンスに追加するには:

  1. ブラウザで モデル ページを開き、 取得 ボタンをクリックします。これにより、モデルがインベントリに追加されます。
  2. Studio で、 ビュー タブに移動し、 ツールボックス をクリックします。
  3. ツールボックスウィンドウで、 インベントリ ボタンをクリックします。次に、ドロップダウンが マイモデル にあることを確認します。
  4. 選択してバーチャル空間に追加する ブラスター モデル。

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

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

  1. ブラスター内の ツールコントローラー LocalScript

  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. onAction という名前の機能を作成し、3つの引数を受け取ります: actionNameinputState、そして inputObject。ユーザーの入力が検出されたときに実行される機能になります。


    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

アクション操作バインド

は、複数の引数を受け入れる 関数を使用して、特定の入力に機能をバインドすることができます:

  • アクションの名操作
  • アクションを処理する機能 (「コールバック」とも呼ばれます)
  • タッチスクリーンボタンを表示するかどうか
  • アクションを検出して関連付けるための Enum.KeyCodes の任意の量。

キーコードは、キーボードのキーやコントローラーのボタンなど、異なる入力ボタンを表す値です。コードの完全なリストは、here で利用可能です。

  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 機能を無効にし、リロードアニメーションが終了したら再度有効にすることができます。