ユーザーの入力をアクションに接続すると、ユーザーはエクスペリエンスの機能に対してより良い、より直感的なコントロールを得るようになります。このチュートリアルでは、特定のキーにリロードアクションをバインドします。
はじめに
このチュートリアルでは、Blaster ツールを使用して、プレイヤーツールを作成する で作成されました。ツールを作成するか、Blaster モデルをダウンロードして、2> StarterPack2> に挿入することができます。
モデルはインベントリに追加され、エクスペリエンス間で使用できます。モデルをエクスペリエンスに追加するには:
- ブラウザで モデルページを開き, 取得ボタンをクリック をクリックします。これにより、モデルがインベントリに追加されます。
- In Studio, ビュー タブに移動し、ツールボックス をクリックします。
- ツールボックスウィンドウで インベントリ ボタンをクリックします。そして、ドロップダウンが マイモデル にあることを確認してください。
- Select the Blaster model to add it into the experience.
アクションハンドラーを作成する
まず、ユーザーの入力を検出したときに処理する関数が必要です。
ブラスターの中の ツールコントローラー 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 とし、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 (開始状態) であることを確認してください。これは、2>inputState2> が変更されるたびに関数が実行されるたびに、5>playerInputState5> がリロ
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
アクションのバインディング
ContextActionService は、 バインド を使用して、 Class.ContextActionService:BindAction()|BindAction' 関数を特定の入力にバインドできます。これは、複数の引数を受け入れることができる関数 0>Class.ContextActionService:BindAction()|BindAction0> を使用しています:
- アクションの名操作
- アクションを処理する関数 (「コールバック」ともします)
- タッチスクリーンボタンが表示されるかどうか
- アクションに検出して関連付けるための 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)Connect the toolUnequipped function to the Unequipped event so the function will run when the event fires.
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 機能を無効にし、再読み込みアニメーションが完了したら、toolActivated 機能を再読み込みます。