ユーザーが 3D 空間のオブジェクトに近づいたときに表示されるインタラクティブな近接プロンプトを作成し、ユーザーの入力に対応してアクションをトリガーできます。
このチュートリアルは、Dungeon Delve プロジェクトをショーケースとして使用します。続行するには、Studio でプロジェクトを開いてください。
プロンプトを作成
オンスクリーンプロンプトは、ProximityPromptオブジェクトがAttachment、BasePart、または2>Class.Model2>に親付けられているように生成されます。
Select the PrisonDoor model in the 3D view or from the Explorer ( Workspace → PromptObjects → 1>PrisonDoor1> ).
ツリを拡張し、 ドア オブジェクトを選択します。
プロンプトを Attachment に配置すると、場所に関連するポイントが発生する場所に対するより多くの制御が提供されます。新しい アタッチメント を挿入し、 プロンプトアタッチメント に名前を変更します。
新しいアタッチメントの ポジション プロパティを見つけ、 -2.25 、 -0.5 、-1> 0.51> を設定します。これにより、ドアのキーホールの前に移動します。
プロンプトアタッチメント の上にマウスポインタを置き、新しい ProximityPrompt オブジェクトを挿入します。
外観のプロンプト
プロンプトは 3つの主要な要素で構成されており、それぞれ以下のプロパティによって制御できます:
- オブジェクトテキスト — オプション名でオブジェクトと対話できる。
- アクションテキスト — ユーザーに表示されるオプションのアクション名。
- KeyboardKeyCode — プロンプトをトリガーするキーボードのキー。
- GamepadKeyCode — ゲームパッドボタンで、プロンプトをトリガーする。
刑務所のドアのプロンプトの外観をカスタマイズするには、次の変更を行ってください:
プロパティウィンドウで、オブジェクトテキスト プロパティを見つけ、ドア を入力します。
For the ActionText property, type in ロックを選択 .
有効化距離
プロンプトは、ユーザーの キャラクター がプロンプトオブジェクトの親の定義された 最大アクティベーション距離 内に移動すると表示されます。
デフォルトの値は、ほとんどの場合にうまく機能しますが、 MaxActivationDistance を 4 に変更することで、ユーザーの交流をロックにより近づけることができます。
持続時間を持つ
持続時間プロパティの値は、 持続時間 プロンプトのアクションがトリガーされるのを秒単位で決定します。このドアをアンロックするには、 持続時間 プロパティを 4 に変更します。
アクションを実装
プロンプトイベントを検出する最良の方法は、ProximityPromptService を使用することです - これにより、スクリプトを各プロンプトオブジェクトに追加することなく、イベントを中央で検出できます。
基本的なフレームワークは次のとおりです:
local ProximityPromptService = game:GetService("ProximityPromptService")
-- プロンプトがトリガーされたときに検出
local function onPromptTriggered(promptObject, player)
end
-- プロンプトホールドが開始するときに検出
local function onPromptHoldBegan(promptObject, player)
end
-- プロンプトホールドが終了したときに検出
local function onPromptHoldEnded(promptObject, player)
end
-- プロンプトイベントを処理機能に接続する
ProximityPromptService.PromptTriggered:Connect(onPromptTriggered)
ProximityPromptService.PromptButtonHoldBegan:Connect(onPromptHoldBegan)
ProximityPromptService.PromptButtonHoldEnded:Connect(onPromptHoldEnded)
イベント | 説明 |
---|---|
PromptTriggered | ユーザーがプロンプトとインタラクトしたときに発動します (後 期限切れのプロンプトの持続時間です)。 |
PromptButtonHoldBegan | ユーザーが非ゼロのプロンプトとインタラクトを開始すると、HoldDuration のプロンプトを開始します。 |
PromptButtonHoldEnded | ユーザーが非ゼロのプロンプトとのインタラクションを停止すると、HoldDuration |
In the ダンジョンデルベット project, these events are managed by the PromptEvents script within ServerScriptService .
スクリプト内で、上記のイベントは、オブジェクトアクションModuleScript 内の関数を呼び出し、また、ServerScriptService 内にあります。
local ProximityPromptService = game:GetService("ProximityPromptService")
local ServerScriptService = game:GetService("ServerScriptService")
local ObjectActions = require(ServerScriptService.ObjectActions)
-- プロンプトがトリガーされたときに検出
local function onPromptTriggered(promptObject, player)
ObjectActions.promptTriggeredActions(promptObject, player)
end
-- プロンプトホールドが開始するときに検出
local function onPromptHoldBegan(promptObject, player)
ObjectActions.promptHoldBeganActions(promptObject, player)
end
-- プロンプトホールドが終了したときに検出
local function onPromptHoldEnded(promptObject, player)
ObjectActions.promptHoldEndedActions(promptObject, player)
end
-- プロンプトイベントを処理機能に接続する
ProximityPromptService.PromptTriggered:Connect(onPromptTriggered)
ProximityPromptService.PromptButtonHoldBegan:Connect(onPromptHoldBegan)
ProximityPromptService.PromptButtonHoldEnded:Connect(onPromptHoldEnded)
近接プロンプトは、ゲーム内のオブジェクトの交互に便利でカスタマイズ可能なソリューションです。Check out the ProximityPrompt と ProximityPromptService 参照ページで、さらにプロンプトの動作を制御する方法を探索し、クリエイティブなオブジェクトを ダンジョンデ