ProximityPrompt オブジェクトは、ユーザーがゲーム内のオブジェクト(ドア、ライトスイッチ、ボタンなど)に近づくとアクションをトリガーするためのインタラクションを促します。このオブジェクトを使用すると、次のことができます:
- ユーザーがゲーム内でインタラクトできるオブジェクトを示す。
- ユーザーがオブジェクトに対して取ることができるアクションを表示し、キーを押したり保持したりするなどのユーザー入力を通じてアクションをトリガーする。
- キーボード、ゲームパッド、タッチスクリーンキーなど、すべての入力タイプに対して正しい入力を表示する。
プロキシミティプロンプトの作成
プロキシミティプロンプトは、ユーザーがインタラクトすることを望むパート、モデル、またはアタッチメントに親子関係を持たせる必要があります。BasePart、Model、または Attachment オブジェクトにプロキシミティプロンプトを追加するには:
Explorer ウィンドウで、BasePart、Model、または Attachment にカーソルを合わせ、⊕ ボタンをクリックします。コンテキストメニューが表示されます。
メニューから ProximityPrompt を挿入します。

プロキシミティプロンプトのカスタマイズ
プロキシミティプロンプトは、表示方法 appear、表示されるタイミング visible、およびユーザーがアクションをトリガーするために行うべきこと trigger the action に基づいてカスタマイズできます。
外観
プロキシミティプロンプトは、次の3つのことを伝える必要があります:
- ユーザーがインタラクトできる オブジェクト。
- プロキシミティプロンプトとインタラクトしたときにトリガーされる アクション。
- ユーザーが押すか保持する必要がある キー。
これらは次のプロパティを通じて指定できます:
ObjectText ユーザーがインタラクトできるオブジェクトのオプションの名前。
ActionText ユーザーがトリガーするアクションのオプションの名前。
KeyboardKeyCode ユーザーがアクションをトリガーするために押すか保持する必要があるキーボードキー。
GamepadKeyCode ユーザーがアクションをトリガーするために押すか保持する必要があるゲームパッドキー。

可視性
プロキシミティプロンプトが表示されるタイミングは、MaxActivationDistance、RequiresLineOfSight、および Exclusivity プロパティを通じて制御できます。
MaxActivationDistance
MaxActivationDistance プロパティは、プロキシミティプロンプトの可視性をアクティブにする範囲を定義します。ユーザーのキャラクターがその範囲に入ると、プロキシミティプロンプトが表示されます。

RequiresLineOfSight
RequiresLineOfSight プロパティは、カメラから ProximityPrompt オブジェクトへの明確なパスがあるときにプロキシミティプロンプトの可視性をアクティブにします。デフォルトでは、このプロパティは true に設定されています。
Exclusivity
ユーザーのキャラクターが複数のプロキシミティプロンプトの範囲内にいる場合、各プロキシミティプロンプトの可視性は、カメラが指しているプロキシミティプロンプトと、各プロキシミティプロンプトの Exclusivity プロパティの値によって決まります。

インタラクティビティ
ユーザーがプロキシミティプロンプトとどのようにインタラクトするかは、HoldDuration および ClickablePrompt プロパティを通じてカスタマイズできます。
HoldDuration
HoldDuration プロパティは、ユーザーがキーを押す必要がある秒数を決定します。プロキシミティプロンプトのアクションがトリガーされる前に。このプロパティの値が 0 の場合、プロキシミティプロンプトのアクションは即座にトリガーされます。
ClickablePrompt
ClickablePrompt プロパティは、ユーザーがプロキシミティプロンプトをクリックしてアクションをトリガーできるかどうかを指定します。true に設定されている場合、ユーザーはプロキシミティプロンプトを直接クリックするか、指定されたキーを押すことでプロキシミティプロンプトとインタラクトできます。false に設定されている場合、ユーザーは指定されたキーを押すことでのみプロキシミティプロンプトとインタラクトできます。
スクリプトプロキシミティプロンプト
プロキシミティプロンプトイベントには、ProximityPrompt オブジェクト自体または ProximityPromptService を通じて接続できます。ProximityPromptService を使用すると、1つの場所からすべてのプロキシミティプロンプトの動作を管理でき、ゲーム内での重複コードの必要がなくなります。
| イベント | 説明 |
|---|---|
| PromptTriggered | プレイヤーがプロキシミティプロンプトとインタラクトしたときに発火します(非ゼロの HoldDuration を持つプロンプトの期間後)。 |
| PromptTriggerEnded | プレイヤーがプロキシミティプロンプトとのインタラクトを停止したときにトリガーされます。 |
| PromptButtonHoldBegan | プレイヤーが非ゼロの HoldDuration 値を持つプロキシミティプロンプトとのインタラクトを開始したときに発火します。 |
| PromptButtonHoldEnded | プレイヤーが非ゼロの HoldDuration 値を持つプロキシミティプロンプトとのインタラクトを停止したときに発火します。 |
| PromptShown | プロキシミティプロンプトが表示されたときに LocalScripts でトリガーされます。 |
| PromptHidden | プロンプトが隠されたときに LocalScripts でトリガーされます。 |
以下のコードサンプルには、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)