이 예시는 3D 세계에서 서로 가까운 사용자들을 위한 독점적인 채팅을 구현하는 방법을 보여줍니다. 이 함수는 TextSource를 사용하여 메시지를 받을 수 있는 사용자의 위치를 식별하는 콜백을 확장합니다. 이 함수가 false를 반환하면 사용자가 메시지 발신자와 사전 설정된 유효 거리보다 멀리 떨어져 있음을 의미하므로 시스템은 그 사용자에게 메시지를 전달하지 않습니다.
다음 코드를 ServerScriptService의 Script에 추가하세요:
서버
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