近接ベースのチャット

*このコンテンツは、ベータ版のAI(人工知能)を使用して翻訳されており、エラーが含まれている可能性があります。このページを英語で表示するには、 こちら をクリックしてください。

この例では、ゲームワールド内で互いに近いユーザーのための排他的なチャットを実装する方法を示します。それは、TextSource を使用した機能でコールバックを拡張し、潜在的なメッセージ受信者の場所を識別するユーザーを識別します。この機能が false を返す場合、ユーザーがメッセージ送信者からのプリセット有効範囲よりも遠くを見つけたことを意味し、システムはそのユーザーにメッセージを送信しません。

次のものを ScriptServerScriptService に追加します:

サーバー

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