通常、エクスペリエンス内のコードは、実行しているサーバーまたはクライアントにのみ影響を与えることができますが、以下の状況では、異なるサーバーが互いに通信する必要があります:
- グローバルアナウンス — ユーザーが特別なアイテムを見つけたなど、エクスペリエンスのサーバーにアナウンスを送信します。
- リアルタイムサーバーブラウザ — すべてのエクスペリエンスサーバーのリストと、それらの中にいる人々 (すべての 1 分ごとに更新される) をコンパイルし、リストを最大 20 個のサーバーで表示します。
Class.MessagingService を使用して、エクスペリエンスでサーバー間メッセージをサポートできます。テレポートプレイグラウンドサンプルエクスペリエンスを使用して、クロスサーバーメッセージがどのように機能するかを前に実装することもできます。最後に、ここを参照して、外部ツー
サーバー間メッセージ設定
クロスサーバーメッセージを有効にするには、複数のサーバーからアクセス可能なカスタマイズされたメッセージチャンネル トピック を設定する必要があります。トピックを作成すると、トピックにサブスクライバーを ユーザー を サブスクライバー を設定して、メッセージを受信し、トピックに公開メッ
メッセージを受信するユーザーにサブスクリプトを受信
Use MessagingService:SubscribeAsync() を使用して、ユーザーをトピックにサブスクライブし、メッセージをそのトピックに公開するコールバック関数を指定します。たとえば、次のコードサンプルは、任意のユーザーが別のサーバーにテレポートされるときにメッセージを受信する FriendServerEvent トピックをサブ
local MessagingService = game:GetService("MessagingService")
local Players = game:GetService("Players")
local MESSAGING_TOPIC = "FriendServerEvent"
Players.PlayerAdded:Connect(function(player)
-- トピックに登録
local subscribeSuccess, subscribeConnection = pcall(function()
return MessagingService:SubscribeAsync(MESSAGING_TOPIC, function(message)
print(message.Data)
end)
end)
if subscribeSuccess then
-- プレイヤーの祖先変更のトピックから解除
player.AncestryChanged:Connect(function()
subscribeConnection:Disconnect()
end)
end
end)
メッセージの公開
Use MessagingService:PublishAsync() を使用して、特定のトピックに一致し、メッセージを公開します。たとえば、次のコードサンプルは、PublishAsync() を使
local MessagingService = game:GetService("MessagingService")
local Players = game:GetService("Players")
local MESSAGING_TOPIC = "FriendServerEvent"
Players.PlayerAdded:Connect(function(player)
-- トピックに公開
local publishSuccess, publishResult = pcall(function()
local message = player.Name .. " joined server with 'JobId' of " .. game.JobId
MessagingService:PublishAsync(MESSAGING_TOPIC, message)
end)
if not publishSuccess then
print(publishResult)
end
end)