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

プロキシミティプロンプトのカスタマイズ
プロキシミティプロンプトをカスタマイズするには、その外観、表示されるタイミング、およびユーザーがアクションをトリガーするために何をするかに基づいてカスタマイズできます。
外観
プロキシミティプロンプトは、三つのことを伝える必要があります。
- ユーザーがインタラクトできるオブジェクト。
- プロキシミティプロンプトにインタラクトしたときにトリガーされるアクション。
- ユーザーが押す必要があるキー。
これを以下のプロパティで指定できます。
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を使用すると、すべてのプロキシミティプロンプトの動作を一つの場所から管理できるため、体験内の重複したコードの必要がなくなります。
| イベント | 説明 |
|---|---|
| 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)