ตัวอย่างนี้แสดงให้เห็นวิธีการทำการแชทเฉพาะสำหรับผู้ใช้ที่อยู่ใกล้กันในโลก 3D โดยจะขยายฟังก์ชันการเรียกกลับด้วยฟังก์ชันที่ใช้ TextSource เพื่อระบุสถานที่ของผู้ใช้ที่อาจเป็นผู้รับข้อความ หากฟังก์ชันนี้คืนค่า false หมายความว่าผู้ใช้อยู่ไกลเกินกว่าระยะที่กำหนดไว้จากผู้ส่งข้อความ ดังนั้นระบบจะไม่ส่งข้อความไปยังผู้ใช้นั้น
เพิ่มสิ่งต่อไปนี้ไปยัง Script ใน ServerScriptService:
Server
local TextChatService = game:GetService("TextChatService")
local Players = game:GetService("Players")
-- รับช่องแชทสำหรับการแชทตามความใกล้ชิด
-- คุณสามารถเปลี่ยนช่องทั่วไปนี้ด้วยช่องเฉพาะ
local generalChannel: TextChannel = TextChatService:WaitForChild("TextChannels").RBXGeneral
-- ฟังก์ชันเพื่อรับตำแหน่งของตัวละครของผู้ใช้
local function getPositionFromUserId(userId: number)
-- รับผู้เล่นที่เกี่ยวข้องกับ ID ผู้ใช้ที่กำหนด
local targetPlayer = Players:GetPlayerByUserId(userId)
-- หากผู้เล่นมีอยู่ ให้รับตำแหน่งของตัวละครของพวกเขา
if targetPlayer then
local targetCharacter = targetPlayer.Character
if targetCharacter then
return targetCharacter:GetPivot().Position
end
end
-- คืนค่าตำแหน่งเริ่มต้นหากไม่พบผู้เล่นหรือตัวละคร
return Vector3.zero
end
-- ตั้งค่าการเรียกกลับสำหรับช่องทั่วไปเพื่อควบคุมการส่งข้อความ
generalChannel.ShouldDeliverCallback = function(textChatMessage: TextChatMessage, targetTextSource: TextSource)
-- รับตำแหน่งของผู้ส่งข้อความและเป้าหมาย
local sourcePos = getPositionFromUserId(textChatMessage.TextSource.UserId)
local targetPos = getPositionFromUserId(targetTextSource.UserId)
-- ส่งข้อความหากระยะห่างระหว่างผู้ส่งและเป้าหมายต่ำกว่า 50 หน่วย
return (targetPos - sourcePos).Magnitude < 50
end