Chat basado en proximidad

*Este contenido se traduce usando la IA (Beta) y puede contener errores. Para ver esta página en inglés, haz clic en aquí.

Este ejemplo muestra cómo implementar un chat exclusivo para usuarios que están cerca unos de otros en el mundo 3D. Extiende el callback con una función usando TextSource para identificar las ubicaciones de un usuario que podría ser un posible receptor del mensaje. Si esta función devuelve false, significa que el usuario se encuentra más lejos que el rango válido preestablecido desde el remitente del mensaje, por lo que el sistema no entrega el mensaje a ese usuario.

Agrega lo siguiente a un Script en ServerScriptService:

Servidor

local TextChatService = game:GetService("TextChatService")
local Players = game:GetService("Players")
-- Obtiene el canal de chat para chat basado en proximidad
-- Puedes reemplazar este canal general con un canal dedicado
local generalChannel: TextChannel = TextChatService:WaitForChild("TextChannels").RBXGeneral
-- Función para obtener la posición del character de un usuario
local function getPositionFromUserId(userId: number)
-- Obtiene el jugador asociado con el ID de usuario dado
local targetPlayer = Players:GetPlayerByUserId(userId)
-- Si el jugador existe, obtiene la posición de su character
if targetPlayer then
local targetCharacter = targetPlayer.Character
if targetCharacter then
return targetCharacter:GetPivot().Position
end
end
-- Devuelve una posición predeterminada si el jugador o character no pueden ser encontrados
return Vector3.zero
end
-- Establece el callback para el canal general para controlar la entrega de mensajes
generalChannel.ShouldDeliverCallback = function(textChatMessage: TextChatMessage, targetTextSource: TextSource)
-- Obtiene las posiciones del remitente del mensaje y del objetivo
local sourcePos = getPositionFromUserId(textChatMessage.TextSource.UserId)
local targetPos = getPositionFromUserId(targetTextSource.UserId)
-- Entrega el mensaje si la distancia entre el remitente y el objetivo es menor a 50 unidades
return (targetPos - sourcePos).Magnitude < 50
end
©2026 Roblox Corporation. Roblox, el logotipo de Roblox y "Powering Imagination" son algunas de nuestras marcas registradas y no registradas en los Estados Unidos y otros países.