プレイヤー層を増やすための一般的なプロモーション方法に加えて、バーチャル空間内に招待状とプロンプトを直接実装し、友達を招待して共同体験ゲームプレイを増やすようプレイヤーに促すことができます。
招待プロンプトシステムには以下の特徴があります。
Dynamic Invitees — 選択リストから複数のフレンドを招待する、または特定のフレンドを招待するようプレイヤーに促します。
起動データ — 招待されたフレンドが参加したときに読み取ることができる任意Player:GetJoinData()の起動データを含めます。 使用例として、招待された友達を座標の場所に来るように経路指定したり、招待された人の参加体験をパーソナライズしたりすることなどがあります。
招待オプションの設定
デフォルトでは、プレイヤーの招待プロンプトには、友達のメニューと招待ボタンが表示されます。 プロンプトメッセージをカスタマイズしたり、特定の友達をターゲットにしたり、招待状に起動データを入れるには、目的のプロパティを備えたExperienceInviteOptionsオブジェクトを設定する必要があります。
プロパティ | 型 | 概要 |
---|---|---|
PromptMessage | 文字列 | (例:複数のフレンドを招待する場合は「Ask your friends to join the adventure!」、特定のフレンドを招待する場合は「Invite this friend to join the adventure!」)カスタム招待プロンプトのメッセージがUIの枠を超えるほど長い場合、表示されないことにご注意ください。 送信側のプレイヤーの招待プロンプトに表示されるカスタムテキスト。 |
InviteUser | 数字 | 招待する特定の友達のRobloxUserId。 指定されていない場合、プレイヤー友達リストから選ぶよう求められます。 |
InviteMessageId | 文字列 | 通知アセットタイプにマッピングするアセットID。 このアセットは、友達が受け取る招待通知のカスタム文字列を保存または多言語化するために使用されます。 詳細については、](#setting-notification-options)通知オプションの設定[をご覧ください。 |
LaunchData | 文字列 | 友達が招待通知から参加するときに、Player:GetJoinData()のパラメータを設定するために使用されます。 最大200文字です。 使用例については、](#including-launch-data)起動データを含める[をご覧ください。 |
LocalScript - Invite Multiple Friends
local SocialService = game:GetService("SocialService")local Players = game:GetService("Players")local player = Players.LocalPlayer-- 招待オプションをカスタムプロンプトメッセージで構築local inviteOptions = Instance.new("ExperienceInviteOptions")inviteOptions.PromptMessage = "Ask your friends to join the adventure!"
通知オプションの設定
デフォルトでは、フレンドが受け取る招待通知に送信者のDisplayName、ユーザー名、体験名が含まれます。 メッセージをカスタマイズするには、クリエーターダッシュボード上で通知アセットを作成して、そのアセット ID をExperienceInviteOptionsのパラメータとして含めることができます。
クリエーターダッシュボードに移動します。
バッジと同様に、通知文字列は特定のバーチャル空間に結び付けられています。 そのバーチャル空間のサムネイルを見つけてクリックします。
左側の列で、通知をクリックします。
中央領域で、通知文字列を作成ボタンをクリックします。
識別子名(自分だけに表示される)とカスタム通知テキストを入力します。 招待された友達のバーチャル空間名を識別するためのプレースホルダーとして**{experienceName}を入れる必要があることにご注意ください。 また、{displayName}**プレースホルダーから送信者のDisplayNameを入れることができます。 例:
- **{displayName}は、{experienceName}**の冒険に参加してほしいと思っています!
- **{displayName}は、{experienceName}**の第 6 ステージをクリアしたところです。 できますか?
準備ができたら、通知文字列を作成ボタンをクリックします。
通知ページで、通知用の ⋯ ボタンをクリックし、アセット ID をコピを選択します。
招待プロンプトのExperienceInviteOptionsオブジェクトで、InviteMessageIdプロパティの値としてアセット ID を貼り付けます。
LocalScript - Invite Multiple Friendslocal 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"
招待を促す
プラットフォームやプレイヤーによって能力が異なる可能性があるため、招待を促すには、最初にプレイヤーが招待を送信できるかどうかを判断する必要があります。 確認したら、プレイヤーに招待プロンプトを表示できます。
- 時々失敗する可能性のある非同期ネットワーク呼び出しであるため、pcall()に包まれたSocialService:CanSendGameInviteAsync()を呼び出します。
- 招待能力が確認された場合、オプションの招待オプションオブジェクトを第 2 引数としてSocialService:PromptGameInvite()を呼び出します。
プロンプトが実行されると、複数のフレンドを招待する、または招待オプションオブジェクトで定義された特定のフレンドを招待するためのプロンプトが画面上に表示されます。 プレイヤーが 1 人以上のフレンドに対して招待ボタンをクリックすると、それらのフレンドは、送信者のDisplayName、ユーザー名、体験名が記載された通知を受け取ります。 通知は、通知オプションの設定で概説されているように、さらにカスタマイズできます。
LocalScript - Invite Multiple Friends
local SocialService = game:GetService("SocialService")
local Players = game:GetService("Players")
local player = Players.LocalPlayer
-- Function to check whether the player can send an invite
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
local success, errorMessage = pcall(function()
SocialService:PromptGameInvite(player)
end)
end
起動データを含む
体験内の協力関係をさらに改善したり、プレイヤーの招待にインセンティブを付与するには、招待されたフレンドを座標の場所にルーティングしたり、招待された人の参加体験をパーソナライズしたりするなどのシナリオに便利な招待プロンプトに、起動データを含めることができます。
- 招待を促す場合、送信者のPlayer.UserId、フレンドの参加時に付与されるバッジの ID、フレンドをスポーンさせる座標位置など、フレンドが体験に参加する際に使用される関連データを 222ExperienceInviteOptionsオブジェクトに含めることができます。 複数のデータをコンパイルする必要がある場合は、JSONEncode()を使用してデータをエンコードします。
LocalScript - Invite Multiple Friends
local HttpService = game:GetService("HttpService")
local SocialService = game:GetService("SocialService")
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local data = {
senderUserID = player.UserId,
spawnLocation = {12, 48, 205.5}
}
local launchData = HttpService:JSONEncode(data)
-- Construct invite options with launch data
local inviteOptions = Instance.new("ExperienceInviteOptions")
inviteOptions.LaunchData = launchData
-- Function to check whether the player can send an invite
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
local success, errorMessage = pcall(function()
SocialService:PromptGameInvite(player, inviteOptions)
end)
end
通知から参加するインカミングフレンドについては、Player:GetJoinData()を介してサーバー側の起動データをチェックします。 招待プロンプトで複数のデータを JSON にエンコードする場合は、JSONDecode()でデコードすることを忘れないでください。
Script - Using Invite Launch Datalocal HttpService = game:GetService("HttpService")local Players = game:GetService("Players")local ATTEMPT_LIMIT = 10local RETRY_DELAY = 1local function onPlayerAdded(player)local launchDatafor i = 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("No launch data received!")endendPlayers.PlayerAdded:Connect(onPlayerAdded)起動データが存在する場合、以下を含む幅広いデザインシナリオに使用できます。
- 起動データで渡された座標位置に基づいて、送信者がクリアしたばかりの難関コースの初めに、インカミングフレンドをスポーンします。
- 起動データのPlayer.UserIdに基づいて送信者がその場所にいるかどうかを確認し、フレンドのキャラクターをそのキャラクターの近くにテレポートさせます。