🐱

【Roblox】ゲーム中でフレンド招待ウィンドウを表示する

2024/02/26に公開

はじめに

こんにちは、まつさこ です。

今回は、Robloxでゲーム中にフレンド招待ウィンドウを表示する方法について解説します。ゲーム中でフレンド招待ウィンドウを表示することで、ユーザーに簡単に友達招待を促すことができます。

作ったもの

今回、はじめてのRobloxエクスペリエンスとして、Really Fun Easy Obby という簡単なオビースタイルのゲームを作成しました。オビー(Obby)とは、障害物を避けながらゴールを目指すいわゆるアスレチックゲーム的なゲームのジャンルです。

いわゆるシンプルな虹色Obbyですが、これを作るだけでも様々な知見が得られました。今回、ゴールにアイテムショーケースを配置し、それに触れることでフレンド招待を促すようにしました。その実装方法について解説します。

https://youtu.be/i93wHkXqHE4

オブジェクトに触れる判定を作る

まずは、ショーケースに触れたときにフレンド招待ウィンドウを表示するための判定を作ります。 GlassShowcase オブジェクトがWorkspace内に配置されている想定で、以下のようにコードを作成します。

local Players = game:GetService("Players")
local showcase = workspace:WaitForChild("GlassShowcase")

local function onTouched(hit, collider)
	local player = Players.LocalPlayer
	if player.Character == hit.Parent and player.Character:WaitForChild('Humanoid') then
		if collider.CanTouch then
			collider.CanTouch = false
			-- Player Invite のウィンドウを表示する処理
		end
	end
end

showcase.Touched:Connect(function(hit)
	onTouched(hit, showcase)
end)

collider.CanTouch をフラグとして利用することで、一度触れたら再度触れないようにしています。

次に、フレンド招待ウィンドウを表示する処理を実装します。

フレンド招待ウィンドウを表示する

フレンド招待ウィンドウを表示するためには、 SocialService サービスを利用します。また、処理を行う前に、プレイヤーを招待できる状態かどうかをチェックします。以下のようにコードを修正します。

local SocialService = game:GetService("SocialService")
local Players = game:GetService("Players")
local showcase = workspace.Goal.GoalShowcases:WaitForChild("GlassShowcase")

local function canSendGameInvite(sendingPlayer)
	local success, canSend = pcall(function()
		return SocialService:CanSendGameInviteAsync(sendingPlayer)
	end)
	return success and canSend
end

local function onTouched(hit, collider)
	local player = Players.LocalPlayer
	if player.Character == hit.Parent and player.Character:WaitForChild('Humanoid') then
		if collider.CanTouch then
			collider.CanTouch = false
			-- Friend inviteを送れる状態かチェック
			local canInvite = canSendGameInvite(player)
			if canInvite then
				local success, errorMessage = pcall(function()
					local ExperienceInviteOptions = Instance.new("ExperienceInviteOptions")
					ExperienceInviteOptions.PromptMessage = "Invite friends and UNLOCK items!"
					SocialService:PromptGameInvite(player, ExperienceInviteOptions)
				end)
				
                -- Friend inviteを送れる状態でなかったときはショーケースにまだ触れられるようにする
				if not success then
					warn("Error while opening game invite: " .. tostring(errorMessage))
					collider.CanTouch = true
					return
				end
			end
		end
	end
end

showcase.Touched:Connect(function(hit)
	onTouched(hit, showcase)
end)

-- 友達招待画面を閉じた時
SocialService.GameInvitePromptClosed:Connect(function(player, recipientIds)
	-- Showcaseを解除
	showcase.Transparency = 1
	showcase.CanCollide = false
end)

SocialService:CanSendGameInviteAsync でプレイヤーが招待できる状態かどうかをチェックし、SocialService:PromptGameInvite でフレンド招待ウィンドウを表示します。

また、 SocialService.GameInvitePromptClosed イベントでウィンドウが閉じたときの処理を行っています。ウィンドウを閉じた時、ショーケースを透明にし、もう触れられないようにしています。

まとめ

この記事では、Robloxでゲーム中にフレンド招待ウィンドウを表示する方法について解説しました。適切な場面で友達招待を促すことで、エクスペリエンスを多くのユーザーに知ってもらえる機会を作れそうです!

読んでくださりありがとうございました🤗

moze テックブログ

Discussion