ユーザーが 3D 空間でオブジェクトに接近すると表示されるインタラクティブな近接プロンプトを作成し、ユーザーの入力に対してアクションをトリガーできます。
このチュートリアルでは、ダンジョンデルヴェ プロジェクトを展示として使用します。続行する前に、Studio で開いてください。

プロンプトを作成
画面上のプロンプトは、ProximityPrompt オブジェクトが Attachment 、BasePart 、または Model に親属して生成されます。
3D ビューまたはエクスプローラー ( ワークスペース → プロンプトオブジェクト → プリズンドア ) で 刑務所ドア モデルを選択します。
ツリーを拡張し、 ドア オブジェクトを選択します。
プロンプトを Attachment に配置すると、パーツ/モデルに直接配置するよりも、相互作用の場所をより制御できます。新しい 添付ファイル を挿入し、名前を プロンプ添付ファイル に変更します。
新しい添付ファイルの 位置 プロパティを見つけて、 -2.25 、 -0.5 、- 0.5 に設定します。これはドアの鍵穴の前に移動します。
プロンプト添付 の上にマウスポインタを置き、新しい 近接プロンプト オブジェクトを挿入します。
プロンプトの表外見
プロンプトは、次のプロパティのそれぞれが制御できる 3つの主要な要素で構成されています:

- オブジェクトテキスト — 対話するオブジェクトのオプション名。
- アクションテキスト — ユーザーに表示されるオプションのアクション名。
- キーボードキーコード — プロンプトをトリガーするキーボードキー。
- GamepadKeyCode — プロンプトをトリガーするゲームパッドボタン。
刑務所のドアプロンプトの外観をカスタマイズするには、次の変更を行います:
プロパティウィンドウで、 オブジェクトテキスト プロパティを見つけて ドア を入力します。
アクションテキスト プロパティの場合、 ピックロック を入力します。
有効化距離
ユーザーの キャラクター がプロンプトオブジェクトの親の定義された MaxActivationDistance 範囲内で移動すると、プロンプトが表示されます。

デフォルト値はほとんどの場合、うまく機能しますが、 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 | ユーザーがプロンプトと対話するときに発火します ( 後の プロンプトの期間がゼロでない HoldDuration )。 |
PromptButtonHoldBegan | ユーザーが非ゼロのプロンプと対話を開始すると、発火します HoldDuration。 |
PromptButtonHoldEnded | ユーザーが非ゼロのプロンプとの交流を停止すると発火します HoldDuration |
ダンジョンデルブ プロジェクトでは、これらのイベントは PromptEvents スクリプト内で 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)
近接プロンプトは、ゲーム内オブジェクトの相互作用に便利でカスタマイズ可能なソリューションです。プロンプトの動作を制御する方法をさらに探索するには、ProximityPrompt および ProximityPromptService 参照ページをチェックし、クリエイティブなインスピレーションを探るには、Dungeon Delve で他のインタラクティブオブジェクトを探索してください。