Chat basé sur la proximité

*Ce contenu est traduit en utilisant l'IA (Beta) et peut contenir des erreurs. Pour consulter cette page en anglais, clique ici.

Cet exemple montre comment mettre en œuvre un chat exclusif pour les utilisateurs qui sont proches les uns des autres dans le monde 3D. Il étend le rappel avec une fonction utilisant TextSource pour identifier les positions d'un utilisateur qui pourrait être un potentiel destinataire de message. Si cette fonction renvoie false, cela signifie que l'utilisateur se trouve à une distance supérieure à la plage valide prédéfinie par rapport à l'expéditeur du message, donc le système ne livre pas le message à cet utilisateur.

Ajoutez ce qui suit à un Script dans ServerScriptService :

Serveur

local TextChatService = game:GetService("TextChatService")
local Players = game:GetService("Players")
-- Obtenez le canal de chat pour le chat basé sur la proximité
-- Vous pouvez remplacer ce canal général par un canal dédié
local generalChannel: TextChannel = TextChatService:WaitForChild("TextChannels").RBXGeneral
-- Fonction pour obtenir la position du personnage d'un utilisateur
local function getPositionFromUserId(userId: number)
-- Obtenez le joueur associé à l'ID utilisateur donné
local targetPlayer = Players:GetPlayerByUserId(userId)
-- Si le joueur existe, obtenez la position de son personnage
if targetPlayer then
local targetCharacter = targetPlayer.Character
if targetCharacter then
return targetCharacter:GetPivot().Position
end
end
-- Retournez une position par défaut si le joueur ou le personnage ne peut pas être trouvé
return Vector3.zero
end
-- Définissez le rappel pour le canal général afin de contrôler la livraison des messages
generalChannel.ShouldDeliverCallback = function(textChatMessage: TextChatMessage, targetTextSource: TextSource)
-- Obtenez les positions de l'expéditeur du message et de la cible
local sourcePos = getPositionFromUserId(textChatMessage.TextSource.UserId)
local targetPos = getPositionFromUserId(targetTextSource.UserId)
-- Livrer le message si la distance entre l'expéditeur et la cible est inférieure à 50 unités
return (targetPos - sourcePos).Magnitude < 50
end
©2026 Société Roblox. Roblox, le logo Roblox et Powering Imagination font partie de nos marques déposées aux États-Unis et dans d'autres pays.