一般的な プロモーション 方法に加えて、ゲーム内で直接 招待プロンプト を実装し、プレイヤーに友達を招待してもらい、共同体験を促進することができます。
招待プロンプトシステムの特徴は次のとおりです:
- 動的な招待者 — プレイヤーに選択リストから複数の友達を招待するよう促すか、特定の友達を1人招待します。
- ローンチデータ — 招待された友達が参加したときに Player:GetJoinData() を通じて読み取ることができるオプションの ローンチデータ を含めます。具体的な使用例には、招待された友達を座標位置にルーティングしたり、参加者のために参加ゲームをパーソナライズすることが含まれます。
また、フレンド招待報酬システム を使用して、招待者と招待された友達を追跡および報酬を与えることもできます。

招待オプションの設定
デフォルトでは、プレイヤー用の招待プロンプトには 招待 ボタンを持つ友達のメニューが表示されます。プロンプトメッセージをカスタマイズしたり、特定の友達をターゲットにしたり、招待にローンチデータを含めたりするには、必要なプロパティを持つ ExperienceInviteOptions オブジェクトを設定する必要があります。
| プロパティ | タイプ | 説明 |
|---|---|---|
| PromptMessage | string | 送信者向けの招待プロンプトに表示されるカスタムテキスト。例えば、複数の友達を招待するプロンプトでは「友達に冒険に参加するように頼んでください!」、特定の友達を招待するプロンプトでは「この友達を冒険に招待します!」などを示します。カスタム招待プロンプトメッセージがUIの境界を超えるほど長い場合は表示されません。 |
| InviteUser | number | 招待する特定の友達のRoblox UserId。指定しない場合、プレイヤーは友達のリストから選ぶよう促されます。 |
| InviteMessageId | string | 通知アセットタイプにマップされるアセットID。このアセットは、友達が受け取る招待通知用のカスタム文字列をストア/ローカライズするために使用されます。詳細については 通知オプションの設定 を参照してください。 |
| LaunchData | string | 友達が招待通知から参加する際に Player:GetJoinData() に設定されるパラメーター。最大200文字。使用例については ローンチデータの含め方 を参照してください。 |
LocalScript - 複数の友達を招待local SocialService = game:GetService("SocialService")local Players = game:GetService("Players")local player = Players.LocalPlayer-- カスタムプロンプトメッセージで招待オプションを構築local inviteOptions = Instance.new("ExperienceInviteOptions")inviteOptions.PromptMessage = "友達に冒険に参加するように頼んでください!"
通知オプションの設定
デフォルトでは、友達が受け取る招待通知には送信者の DisplayName、ユーザー名、ゲーム名が含まれています。メッセージをカスタマイズするには、クリエイターダッシュボード で 通知 アセットを作成し、そのアセットIDを ExperienceInviteOptions のパラメータとして含めます。
クリエイターダッシュボード に移動します。
バッジ と同様に、通知文字列は 特定のゲーム に関連付けられています。そのゲームのサムネイルを見つけてクリックします。
左のカラムで エンゲージメント の中の 通知 をクリックします。
中央の領域で 通知文字列を作成する ボタンをクリックします。
識別名(あなたにだけ見える)とカスタム通知テキストを入力します。「{experienceName}」を含めて、招待された友達のゲーム名を特定し、送信者の DisplayName を {displayName} プレースホルダーを介してオプションで含める必要があります。
例の通知文字列:
- {displayName} があなたに {experienceName} の冒険に参加するように求めています!
- {displayName} が {experienceName} の第六ステージをクリアしました。あなたはできる?
準備ができたら、通知文字列を作成する ボタンをクリックします。
通知ページの通知のテーブルで、アクション カラムの ⋯ ボタンをクリックし、アセットIDをコピー を選択します。
招待プロンプトの ExperienceInviteOptions オブジェクトに、アセットIDを InviteMessageId プロパティの値として貼り付けます。
LocalScript - 複数の友達を招待local SocialService = game:GetService("SocialService")local Players = game:GetService("Players")local player = Players.LocalPlayer-- 友達のユーザーIDで招待オプションを構築local inviteOptions = Instance.new("ExperienceInviteOptions")inviteOptions.InviteMessageId = "ef0e0790-e2e8-4441-9a32-93f3a5783bf1"
招待を促す
招待を促すには、まずプレイヤーが 招待 を送信できるかどうかを確認する必要があります。この能力はプラットフォームやプレイヤーによって異なる場合があります。確認が取れたら、プレイヤーに招待プロンプトを表示できます。
- SocialService:CanSendGameInviteAsync() を呼び出し、pcall() でラップします。これは非同期のネットワーク呼び出しで、時折失敗する可能性があります。
- 招待能力が確認された場合、SocialService:PromptGameInvite() を、オプションの 招待オプションオブジェクト を第二引数として呼び出します。
プロンプトが表示されると、プレイヤーは複数の友達を招待するか、招待オプションオブジェクト で定義された特定の友達を招待するための画面上のプロンプトを確認できます。その後、プレイヤーが1人以上の友達の 招待 ボタンをクリックすると、その友達には送信者の DisplayName、ユーザー名、経験名が含まれた通知が送信されます。通知は、通知オプションの設定 に記載されているようにさらにカスタマイズできます。
LocalScript - 複数の友達を招待
local SocialService = game:GetService("SocialService")
local Players = game:GetService("Players")
local player = Players.LocalPlayer
-- プレイヤーが招待を送信できるかどうかを確認する関数
local function canSendGameInvite(sendingPlayer)
local success, canSend = pcall(function()
return SocialService:CanSendGameInviteAsync(sendingPlayer)
end)
return success and canSend
end
local canInvite = canSendGameInvite(player)
if canInvite then
SocialService:PromptGameInvite(player)
end
ローンチデータの含め方
体験内の協力をさらに強化するためやプレイヤーの招待を促すために、招待プロンプトに ローンチデータ を含めることができます。これは、招待された友達を座標位置にルーティングしたり、参加者のために参加ゲームをパーソナライズしたりするのに便利です。
招待を促す ときに、友達がゲームに参加する際に使用される関連データを含む ExperienceInviteOptions オブジェクトを含めます。例えば、送信者の Player.UserId、友達が参加した際に贈る バッジ のID、または友達をスポーンさせるための座標位置などです。複数のデータをまとめる必要がある場合は、JSONEncode() を使用してデータをエンコードします。
LocalScript - 複数の友達を招待local HttpService = game:GetService("HttpService")local SocialService = game:GetService("SocialService")local Players = game:GetService("Players")local player = Players.LocalPlayerlocal data = {senderUserID = player.UserId,spawnLocation = {12, 48, 205.5}}local launchData = HttpService:JSONEncode(data)-- ローンチデータで招待オプションを構築local inviteOptions = Instance.new("ExperienceInviteOptions")inviteOptions.LaunchData = launchData-- プレイヤーが招待を送信できるかどうかを確認する関数local function canSendGameInvite(sendingPlayer)local success, canSend = pcall(function()return SocialService:CanSendGameInviteAsync(sendingPlayer)end)return success and canSendendlocal canInvite = canSendGameInvite(player)if canInvite thenSocialService:PromptGameInvite(player, inviteOptions)end通知を介して参加する友達のために、サーバー側で Player:GetJoinData() を介してローンチデータをチェックします。招待プロンプトのためであれば、JSONで複数のデータをエンコードした場合は、 JSONDecode() でデコードすることを忘れないでください。
Script - 招待ローンチデータの使用local HttpService = game:GetService("HttpService")local Players = game:GetService("Players")local ATTEMPT_LIMIT = 10local RETRY_DELAY = 1local function onPlayerAdded(player)local launchDatafor _ = 1, ATTEMPT_LIMIT dotask.wait(RETRY_DELAY)local joinData = player:GetJoinData()if joinData.LaunchData ~= "" thenlaunchData = joinData.LaunchDatabreakendendif launchData thenlocal data = HttpService:JSONDecode(launchData)print(data.senderUserID)print(data.spawnLocation)elsewarn("ローンチデータは受信されませんでした!")endendPlayers.PlayerAdded:Connect(onPlayerAdded)ローンチデータが存在する場合、次のようなさまざまなデザインシナリオに利用できます:
- 招待者がちょうどクリアした挑戦的な障害物コースの始まりに友達をスポーンさせるために、ローンチデータを介して渡された座標位置を基にします。
- ローンチデータ内の Player.UserId に基づいて 送信者 がその場所にいるかどうかチェックし、友達のキャラクターを彼らのキャラクターの近くにテレポートさせます。