ユーザーの入力をアクションに接続すると、ユーザーはエクスペリエンスの機能について、より良く、より直感的に制御できるようになります。このチュートリアルでは、リロードアクションを特定のキーにバインドします。
始める
このチュートリアルでは、 ブラスター ツールを使用し、プレイヤーツールの作成で作成されました。これらの指示に従ってツールを作成するか、ブラスターモデルをダウンロードして スターターパック に挿入できます。
モデルは、どのエクスペリエンス間でも使用できるように、インベントリに追加できます。モデルをエクスペリエンスに追加するには:
- ブラウザで モデル ページを開き、 取得 ボタンをクリックします。これにより、モデルがインベントリに追加されます。
- Studio で、 ビュー タブに移動し、 ツールボックス をクリックします。
- ツールボックスウィンドウで、 インベントリ ボタンをクリックします。次に、ドロップダウンが マイモデル にあることを確認します。
- 選択してバーチャル空間に追加する ブラスター モデル。
アクションハンドラーを作成する
まず、ユーザーの入力が検出されたときに処理する機能が必要です。
ブラスター内の ツールコントローラー LocalScript
アクションの名前を保存する操作数を作成します。
local tool = script.Parentlocal RELOAD_ACTION = "reloadWeapon"local function toolEquipped()tool.Handle.Equip:Play()endlocal function toolActivated()tool.Handle.Activate:Play()endtool.Equipped:Connect(toolEquipped)tool.Activated:Connect(toolActivated)onAction という名前の機能を作成し、3つの引数を受け取ります: actionName、inputState、そして inputObject。ユーザーの入力が検出されたときに実行される機能になります。
local tool = script.Parentlocal RELOAD_ACTION = "reloadWeapon"local function onAction(actionName, inputState, inputObject)endlocal function toolEquipped()tool.Handle.Equip:Play()end機能内で、指定された actionName がリロードアクション名と一致しているかどうかをチェックし、inputState が UserInputState.Begin (開始状態) であることを確認します。これは重要です、inputState が変更されるたびに機能が実行されますが、リロードは一度だけ発生する必要があります。
local function onAction(actionName, inputState, inputObject)if actionName == RELOAD_ACTION and inputState == Enum.UserInputState.Begin thenendendユーザーが再読み込みしたときに明確にするには、ツールの TextureId を一時的に "rbxassetid://6593020923" に変更し、その後元の値 "rbxassetid://92628145" に戻します。
local function onAction(actionName, inputState, inputObject)if actionName == RELOAD_ACTION and inputState == Enum.UserInputState.Begin thentool.TextureId = "rbxassetid://6593020923"task.wait(2)tool.TextureId = "rbxassetid://92628145"endend
アクション操作バインド
は、複数の引数を受け入れる 関数を使用して、特定の入力に機能をバインドすることができます:
- アクションの名操作
- アクションを処理する機能 (「コールバック」とも呼ばれます)
- タッチスクリーンボタンを表示するかどうか
- アクションを検出して関連付けるための Enum.KeyCodes の任意の量。
キーコードは、キーボードのキーやコントローラーのボタンなど、異なる入力ボタンを表す値です。コードの完全なリストは、here で利用可能です。
スクリプトの最初に ContextActionService を取得します。
local ContextActionService = game:GetService("ContextActionService")local tool = script.Parentlocal RELOAD_ACTION = "reloadWeapon"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 thentool.TextureId = "rbxassetid://6593020923"task.wait(2)tool.TextureId = "rbxassetid://92628145"endendlocal function toolEquipped()ContextActionService:BindAction(RELOAD_ACTION, onAction, true, Enum.KeyCode.R)tool.Handle.Equip:Play()endツールを装備し、キーボードの R キーを押してプレイテストを行います。バックパックアイコンは、武器がリロード中であることを示すため、一時的に待機シンボルに変更する必要があります:
アクションを解除す操作
ユーザーがツールを装備解除すると、アクションは バインド解除 になる必要があり、ツールが装備されていない状態で再読み込みできなくなります。
新しい関数 toolUnequipped を作成し、アクション名を通過して UnbindAction を呼び出します。
local function toolEquipped()ContextActionService:BindAction(RELOAD_ACTION, onAction, true, Enum.KeyCode.R)tool.Handle.Equip:Play()endlocal function toolUnequipped()ContextActionService:UnbindAction(RELOAD_ACTION)endlocal function toolActivated()tool.Handle.Activate:Play()endtool.Equipped:Connect(toolEquipped)tool.Activated:Connect(toolActivated)toolUnequipped 機能をUnequippedイベントに接続して、イベントが発動すると機能が実行されます。
local ContextActionService = game:GetService("ContextActionService")local tool = script.Parentlocal RELOAD_ACTION = "reloadWeapon"local function onAction(actionName, inputState, inputObject)if actionName == RELOAD_ACTION and inputState == Enum.UserInputState.Begin thentool.TextureId = "rbxassetid://6593020923"task.wait(2)tool.TextureId = "rbxassetid://92628145"endendlocal function toolEquipped()ContextActionService:BindAction(RELOAD_ACTION, onAction, true, Enum.KeyCode.R)tool.Handle.Equip:Play()endlocal function toolUnequipped()ContextActionService:UnbindAction(RELOAD_ACTION)endlocal function toolActivated()tool.Handle.Activate:Play()endtool.Equipped:Connect(toolEquipped)tool.Unequipped:Connect(toolUnequipped)tool.Activated:Connect(toolActivated)すべてが正しく機能することを確認するためにプレイテストを行います。ツールが装備されているときに再読み込みできますが、装備されていないときにはできません。
リロードアニメーションが完了しました - 追加の課題のために、ブラスターが発射されるたびに弾薬カウンターをカウントダウンしてみてください。銃に弾薬がないときに toolActivated 機能を無効にし、リロードアニメーションが終了したら再度有効にすることができます。