Trò chuyện dựa trên cảm biến

*Nội dung này được dịch bằng AI (Beta) và có thể có lỗi. Để xem trang này bằng tiếng Anh, hãy nhấp vào đây.

Ví dụ này cho thấy cách thực hiện một cuộc trò chuyện độc quyền cho người dùng ở gần nhau trong thế giới trò chơi.Nó mở rộng callback với một chức năng sử dụng TextSource để xác định vị trí của một người dùng có thể là một người nhận tin nhắn tiềm năng.Nếu chức năng này trả về false , có nghĩa là người dùng tìm thấy phạm vi hợp lệ hơn từ người gửi tin nhắn, do đó hệ thống không gửi tin nhắn cho người dùng đó.

Thêm các thứ sau vào Script trong ServerScriptService :

Máy chủ

local TextChatService = game:GetService("TextChatService")
local Players = game:GetService("Players")
-- Nhận kênh trò chuyện cho trò chuyện dựa trên cảm biến
-- Bạn có thể thay thế kênh chung này bằng một kênh chuyên dụng
local generalChannel: TextChannel = TextChatService:WaitForChild("TextChannels").RBXGeneral
-- Chức năng để lấy vị trí của nhân vật của người dùng
local function getPositionFromUserId(userId: number)
-- Nhận người chơi liên quan đến ID người dùng được cung cấp
local targetPlayer = Players:GetPlayerByUserId(userId)
-- Nếu người chơi tồn tại, lấy vị trí nhân vật của họ
if targetPlayer then
local targetCharacter = targetPlayer.Character
if targetCharacter then
return targetCharacter:GetPivot().Position
end
end
-- Trả vị trí mặc định nếu không thể tìm thấy người chơi hoặc nhân vật
return Vector3.zero
end
-- Đặt lại cuộc gọi trở lại cho kênh chung để kiểm soát giao dịch tin nhắn
generalChannel.ShouldDeliverCallback = function(textChatMessage: TextChatMessage, targetTextSource: TextSource)
-- Nhận vị trí của người gửi tin nhắn và mục tiêu
local sourcePos = getPositionFromUserId(textChatMessage.TextSource.UserId)
local targetPos = getPositionFromUserId(targetTextSource.UserId)
-- Gửi tin nhắn nếu khoảng cách giữa người gửi và mục tiêu là dưới 50 đơn vị
return (targetPos - sourcePos).Magnitude < 50
end