Bạn có thể tạo ra những gợi ý tương tác gần xuất hiện khi người dùng đến gần các đối tượng trong không gian 3D, sau đó kích hoạt hành động dựa trên đầu vào của người dùng.
Hướng dẫn này sử dụng dự án Dungeon Delve như một ví dụ. Để theo dõi, hãy mở nó trong Studio trước khi tiếp tục.

Tạo một gợi ý
Các gợi ý trên màn hình được tạo ra bởi một đối tượng ProximityPrompt được gắn với một Attachment, BasePart, hoặc Model.
Chọn mô hình PrisonDoor trong chế độ xem 3D hoặc từ Explorer (Workspace → PromptObjects → PrisonDoor).


Mở rộng cây của nó và chọn đối tượng Door.

Đặt một gợi ý trên một Attachment cho phép bạn kiểm soát tốt hơn nơi diễn ra điểm tương tác, so với việc đặt trực tiếp trên phần/mô hình. Chèn một Attachment mới và đổi tên nó thành PromptAttachment.

Tìm thuộc tính Position của gắn mới và đặt nó thành -2.25, -0.5, -0.5. Điều này sẽ di chuyển nó về phía trước lỗ khóa của cửa.


Di chuột qua PromptAttachment và chèn một đối tượng ProximityPrompt mới.

Hình thức gợi ý
Các gợi ý bao gồm ba yếu tố chính, mỗi yếu tố có thể được kiểm soát bởi các thuộc tính sau:

- ObjectText — Một tên tùy chọn cho đối tượng đang được tương tác.
- ActionText — Một tên hành động tùy chọn được hiển thị cho người dùng.
- KeyboardKeyCode — Phím bàn phím sẽ kích hoạt gợi ý.
- GamepadKeyCode — Nút gamepad sẽ kích hoạt gợi ý.
Để tùy chỉnh hình thức của gợi ý cửa ngục, hãy thực hiện các thay đổi sau:
Trong cửa sổ Properties, tìm thuộc tính ObjectText và gõ Door.

Đối với thuộc tính ActionText, gõ Khóa.

Khoảng cách kích hoạt
Các gợi ý xuất hiện khi nhân vật của người dùng di chuyển trong phạm vi đã định của MaxActivationDistance của đối tượng cha của gợi ý.

Giá trị mặc định hoạt động tốt trong hầu hết các trường hợp, nhưng bạn có thể đẩy tương tác của người dùng gần hơn với ổ khóa bằng cách thay đổi MaxActivationDistance thành 4.

Thời gian giữ
Giá trị thuộc tính HoldDuration xác định mức độ nhanh chóng mà hành động của gợi ý được kích hoạt, tính bằng giây. Vì cửa này phải được mở khóa để mở, hãy thay đổi thuộc tính HoldDuration thành 4.

Thực hiện một hành động
Cách tốt nhất để phát hiện các sự kiện gợi ý là thông qua ProximityPromptService — điều này cho phép bạn phát hiện các sự kiện một cách tập trung mà không cần gắn một kịch bản cho mỗi đối tượng gợi ý.
Một khung cơ bản là như sau:
local ProximityPromptService = game:GetService("ProximityPromptService")
-- Phát hiện khi gợi ý được kích hoạt
local function onPromptTriggered(promptObject, player)
end
-- Phát hiện khi việc giữ gợi ý bắt đầu
local function onPromptHoldBegan(promptObject, player)
end
-- Phát hiện khi việc giữ gợi ý kết thúc
local function onPromptHoldEnded(promptObject, player)
end
-- Kết nối các sự kiện gợi ý với các hàm xử lý
ProximityPromptService.PromptTriggered:Connect(onPromptTriggered)
ProximityPromptService.PromptButtonHoldBegan:Connect(onPromptHoldBegan)
ProximityPromptService.PromptButtonHoldEnded:Connect(onPromptHoldEnded)
| Sự kiện | Mô tả |
|---|---|
| PromptTriggered | Được kích hoạt khi người dùng tương tác với một gợi ý (sau thời gian cho một gợi ý với giá trị HoldDuration khác không). |
| PromptButtonHoldBegan | Được kích hoạt khi người dùng bắt đầu tương tác với một gợi ý có giá trị HoldDuration khác không. |
| PromptButtonHoldEnded | Được kích hoạt khi người dùng ngừng tương tác với một gợi ý có giá trị HoldDuration khác không |
Trong dự án Dungeon Delve, các sự kiện này được quản lý bởi kịch bản PromptEvents trong ServerScriptService.

Bên trong kịch bản, các sự kiện trên đơn giản gọi các hàm trong ModuleScript ObjectActions, cũng nằm trong ServerScriptService.
local ProximityPromptService = game:GetService("ProximityPromptService")
local ServerScriptService = game:GetService("ServerScriptService")
local ObjectActions = require(ServerScriptService.ObjectActions)
-- Phát hiện khi gợi ý được kích hoạt
local function onPromptTriggered(promptObject, player)
ObjectActions.promptTriggeredActions(promptObject, player)
end
-- Phát hiện khi việc giữ gợi ý bắt đầu
local function onPromptHoldBegan(promptObject, player)
ObjectActions.promptHoldBeganActions(promptObject, player)
end
-- Phát hiện khi việc giữ gợi ý kết thúc
local function onPromptHoldEnded(promptObject, player)
ObjectActions.promptHoldEndedActions(promptObject, player)
end
-- Kết nối các sự kiện gợi ý với các hàm xử lý
ProximityPromptService.PromptTriggered:Connect(onPromptTriggered)
ProximityPromptService.PromptButtonHoldBegan:Connect(onPromptHoldBegan)
ProximityPromptService.PromptButtonHoldEnded:Connect(onPromptHoldEnded)
Các gợi ý gần là một giải pháp tiện lợi và tùy biến cho việc tương tác với các đối tượng trong trò chơi. Kiểm tra các trang tham khảo ProximityPrompt và ProximityPromptService để tìm thêm nhiều cách để kiểm soát hành vi của gợi ý, và khám phá các đối tượng tương tác khác trong Dungeon Delve để lấy cảm hứng sáng tạo.