ロブロックス(Roblox)のバッジの作り方|作成からゴールで渡すスクリプトまで画像で解説

制作手順難易度: 中級所要時間: 約30分(目安)情報確認日: 2026年10月12日

「自分のゲームをクリアした人にバッジをあげたい」「バッジってお金がかかるの?」

ロブロックス(Roblox)で自分のゲームにバッジを作る方法を、実際の画像付きで誰でも簡単に分かるように解説します。バッジは、ゲームの中で何かをやりとげた人がもらえる「しるし」です。もらったバッジは、その人のロブロックスの持ち物に残ります。

オビーの作り方で作ったコースを使い、ゲームに入った人に「初めて来た」、ゴールに乗った人に「ゴールした」のバッジを渡します。ほかのゲームでもらったバッジの見方や消し方ではなく、自分のゲームにバッジを作る方法です。

中級ステップ15/28 前の記事:ロブロックス(Roblox)でチームを作る方法 全体の順番を見る

使うもの:Roblox Studioが起動するパソコン、ブラウザ(ここではChrome)、Robloxに保存したゲーム。スクリプトの入れ方はゲームパスの作り方と同じ流れです。

今回の完成状態:下の画像のように、ゴールの黄色い床に乗ると画面の右下に「授与されたバッジ」が出て(画像の1)、出力に「(アカウント名) に「ゴールした」を渡しました」と出れば成功です(画像の2)。

バッジとゲームパスの違い

バッジゲームパス
もらい方ゲームの中で決めたことをすると、無料でもらえるRobuxで買う
作る人の費用1日5個までは無料(下の表)作るのは無料。売れると収益になる
向いているものクリア、初めての参加、隠し場所の発見ずっと使える特典

1. バッジの画像を用意する

バッジの画像は、公式の案内では「512×512ピクセル」で作ります。アップロードすると円の形に切り取られるので、大事な文字や絵は円の内側に収めます。左は円の内側に収めた例、右は文字が円の外にあって切れてしまう例です。

アップロードの画面には「フォーマット:.jpg、.png、.tga、.bmp」と出ていました。ここではPNGで作りました。

2. バッジを作るのにかかる費用

作成の画面に出ている注意は、次の表のとおりです。

作る数費用
1個目〜5個目無料
6個目から1個ごとに100 Robux
数え方ゲーム(バーチャル空間)ごと、24時間(グリニッジ標準時)ごと

2個だけ作るなら無料です。無料で作りたいときは、1つのゲームで24時間に作るのを5個までにします。

3. Creator Hubでバッジを作る

バッジは、Robloxに保存したゲームにだけ作れます。まだ保存していないときは、ゲームを公開する方法の手順で先に保存してください。公開の設定が非公開のままでも、バッジは作れました。

バッジは、Creator Hub(ゲームの設定やバッジを作る、Robloxの制作者向けのサイト)で作ります。ブラウザでcreate.roblox.com/dashboard/creationsを開くと、作ったゲームが「バーチャル空間」に並んでいます。バッジを付けたいゲームのカードを押してください(赤い枠)。赤い枠や番号は、その手順で押す場所です。ボタンの名前や置き場所は、Roblox側の更新で変わることがあります。

ゲームの画面が開きます。左のメニューの「エンゲージメント」を押すと、右の「▼」が「▲」に変わり、中の項目が開きます(赤い枠)。

エンゲージメントの中の「バッジ」を押します(赤い枠)。

バッジの画面が開いたら、「バッジ を作成」を押します(赤い枠)。

作成の画面が開きます。最初はメダルの絵が入っています。右の「変更する」(赤い枠)を押すと、パソコンの中の画像を選べる窓が開くので、用意した画像を選んでください。

選んだ画像が、左に表示されます(赤い枠)。画像の右には「画像は、内容審査終了後に他の方々に表示されます」と出ています。

名前(画像の1)と詳細(画像の2)を入れます。画像を選ぶと、名前の欄にファイル名が自動で入るので、消してから入れ直します。名前は50文字まで、詳細は1000文字までです。詳細には、どうすればもらえるかを書きます。

「バッジが有効です」(画像の1)は、オンのままにします。その下に無料で作れる数の注意(画像の2)が出ているのを確かめて、「バッジを作成」(画像の3)を押します。

続けて、2個目の「ゴールした」を作ります。

  1. 左のメニューの「エンゲージメント」の中の「バッジ」を押してバッジの画面を開き、「バッジ を作成」を押します。
  2. 作成の画面で、メダルの絵の右の「変更する」を押し、用意した「ゴールした」の画像を選びます。
  3. 名前の欄に自動で入ったファイル名を消して、「ゴールした」と入れます。
  4. 詳細の欄に「ゴールの黄色い床に乗るともらえます。」と入れます。
  5. 「バッジが有効です」がオンのままで、無料で作れる数の注意が出ているのを確かめてから「バッジを作成」を押します。

バッジの画面に2つ並び、どちらにも「アクティブ」と出ました(赤い枠)。

画像が砂時計の絵になっているのは、画像の審査が終わっていないためです。審査が終わるまでの間も、バッジはもらえました。

4. バッジのIDをコピーする

スクリプトでバッジを渡すには、バッジの番号(ID)が要ります。

まず、バッジの画面で「初めて来た」のカードを押します。「初めて来た」の画面が開きます。

開いた画面で、名前の右にある縦に3つ点が並んだボタン(三点リーダー)を押します。

出てきたメニューの「アセットIDをコピー」(赤い枠)を押すと、IDがコピーされます。2つのバッジのIDは、メモ帳などに控えておくと便利です。

この画像は、画像の審査が終わったあとに撮ったので、作った画像が出ています。

続けて「ゴールした」のIDもコピーします。左上の「バッジに戻る」を押してバッジの画面に戻り、「ゴールした」のカードを押します。開いた画面で、名前の右の三点リーダーを押し、メニューの「アセットIDをコピー」を押します。

IDは、バッジを作ったゲームの中でだけ使えます。別のゲームに作ったバッジのIDを入れても、渡せません。

5. バッジを渡すスクリプトを入れる

Roblox Studioを起動すると、作品一覧の画面(ホーム画面)が出ます。左メニューの「バーチャル空間」を押し、バッジを作ったゲームのカードを押して開きます。開き方の画像はRoblox Studioの使い方の「保存して、同じ作品を開き直す」にあります。ここでは、オビーの作り方で作ったコースが入ったゲームを使っています。エクスプローラのWorkspaceの中の「FirstObby」の左の三角を押して開き、ゴールの黄色い床「Goal」が入っていることを確かめます(あとで貼るコードの7行目で、この2つの名前を使います)。

エクスプローラの「ServerScriptService」にマウスを乗せて「+」を押します(赤い枠)。

検索欄に「Script」と入れ、一覧の「Script」を押します(赤い枠)。

エクスプローラで入ったScriptを選んでF2キーを押し、名前を「BadgeGiver」に変えます(赤い枠)。

RunContextは、スクリプトをサーバーとプレイヤーのパソコンのどちらで動かすかを決める設定です。入れたばかりのScriptのRunContextは「Legacy」になっています。Robloxの公式の説明によると、バッジはサーバーで動くScript(RunContextが「Server」か「Legacy」)から渡します。この記事では、ほかの記事とそろえて「Server」にします。

エクスプローラでBadgeGiverを選んだ状態で、プロパティの検索欄に「RunContext」と入力し、「▼動作」の欄にあるRunContextの一覧から「Server」を選びます(赤い枠)。

エクスプローラでBadgeGiverをダブルクリックして開き、中身を全部消して、次のコードを貼り付けます。4行目と5行目の数字は、4でコピーした自分のバッジのIDに書きかえてください。

local Players = game:GetService("Players")
local BadgeService = game:GetService("BadgeService")

local WELCOME_BADGE_ID = 3036191375608837 -- 「初めて来た」バッジのID
local GOAL_BADGE_ID = 2403247233036027 -- 「ゴールした」バッジのID

local goal = workspace:WaitForChild("FirstObby"):WaitForChild("Goal")

-- 人ごとに「渡している途中」「渡し終えた」を覚えておく
local given = {}

local function giveBadge(player, badgeId)
	local list = given[player]
	if not list or list[badgeId] then
		return -- 抜けた人、渡している途中、渡し終えたバッジは何もしない
	end
	list[badgeId] = "busy"

	-- すでに持っているか確かめる(通信するので pcall で包む)
	local ok, hasBadge = pcall(BadgeService.UserHasBadgeAsync, BadgeService, player.UserId, badgeId)
	if not ok then
		warn("持っているか確かめられませんでした:", hasBadge)
		list[badgeId] = nil -- 次に触れたときにもう一度試す
		return
	end
	if hasBadge then
		print(player.Name .. " はもう持っています:", badgeId)
		list[badgeId] = true
		return
	end

	-- バッジが有効か確かめる
	local okInfo, info = pcall(BadgeService.GetBadgeInfoAsync, BadgeService, badgeId)
	if not okInfo then
		warn("バッジの情報を取れませんでした:", info)
		list[badgeId] = nil
		return
	end
	if not info.IsEnabled then
		warn("バッジ「" .. info.Name .. "」が無効になっています")
		list[badgeId] = nil
		return
	end

	-- バッジを渡す
	local awarded, result = pcall(BadgeService.AwardBadgeAsync, BadgeService, player.UserId, badgeId)
	if awarded and result then
		list[badgeId] = true
		print(player.Name .. " に「" .. info.Name .. "」を渡しました")
	else
		warn("バッジを渡せませんでした:", result)
		list[badgeId] = nil
	end
end

local function onPlayerAdded(player)
	if given[player] then return end -- 同じ人を2回数えない
	given[player] = {}
	giveBadge(player, WELCOME_BADGE_ID) -- 入ってきた人に「初めて来た」
end

Players.PlayerAdded:Connect(onPlayerAdded)
for _, player in Players:GetPlayers() do
	onPlayerAdded(player) -- スクリプトより先に入っていた人の分
end

Players.PlayerRemoving:Connect(function(player)
	given[player] = nil
end)

-- ゴールに触れた人に「ゴールした」
goal.Touched:Connect(function(hit)
	local character = hit.Parent
	local player = Players:GetPlayerFromCharacter(character)
	if not player then return end
	local humanoid = character:FindFirstChildOfClass("Humanoid")
	if not humanoid or humanoid.Health <= 0 then return end
	giveBadge(player, GOAL_BADGE_ID)
end)

貼り付けると、4・5行目にバッジのID(画像の1)、7行目にゴールの場所(画像の2)が入り、エクスプローラのServerScriptServiceの中にBadgeGiver(画像の3)が見えます。

コードの部分していること
UserHasBadgeAsyncすでに持っている人には渡さない。2回目に入った人は「初めて来た」をもらわない
GetBadgeInfoAsync の IsEnabledバッジの情報で有効になっていないと分かったときは渡さず、出力に「が無効になっています」と出す
AwardBadgeAsync実際にバッジを渡す。通信するので pcall(エラーが起きてもスクリプトを止めずに結果を受け取るしくみ)で包む。「ゴールした」は、失敗しても次にゴールに触れたときにやり直す
given渡している途中と渡し終えたバッジを覚えておき、同じ人に重ねて渡そうとしない
goal.Touchedゴールの床に触れたのがプレイヤーのときだけ「ゴールした」を渡す

自分で作った別のコースで使うときは、7行目を、ゴールのパーツの場所に合わせて書きかえます。たとえばWorkspaceに直接「Goal」を置いたときは workspace:WaitForChild("Goal") です。

古い記事やコードでは、AwardBadge(Asyncが付かない名前)が使われていることがあります。Robloxの公式の説明には、こちらは古い名前なので、代わりにAwardBadgeAsyncを使うよう書かれています。

6. テストでバッジをもらう

3D画面の上の作品のタブ「アソビシフト練習3」を押して3D画面に戻り、F5キーでテストを始めます(タブの名前はパソコンによって違います)。ゲームに入ってすぐ、出力に「(アカウント名) に「初めて来た」を渡しました」と出ました(赤い枠)。

コースを渡ってゴールの黄色い床に乗ると、画面の右下に「授与されたバッジ」と「ゴールした」を獲得したという通知が出て(画像の1)、出力にも「(アカウント名) に「ゴールした」を渡しました」と出ます(画像の2)。

Shift + F5キーでテストを停止します。

もう一度、3D画面の上の作品のタブ「アソビシフト練習3」を押して3D画面に戻り、F5キーでテストを始めます(タブの名前はパソコンによって違います)。今度は出力に「(アカウント名) はもう持っています: (バッジのID)」と出て、バッジは渡されませんでした(赤い枠)。

Studioのテストで渡したバッジも、本当にアカウントに付きます。そのため作った本人も、一度もらったバッジはテストのたびにはもらえません。2回目のテストで「はもう持っています」と出たのは、このためです。

持ち物は、ロブロックスのサイトで見られます。Shift + F5キーでテストを停止してから、3で使ったブラウザのCreator Hubの画面に戻り、左のメニューのいちばん下にある「Roblox.com」(赤い枠)を押します。

ロブロックスのホームが開きます。左のメニューの「持ち物」(赤い枠)を押します。

持ち物の画面の「カテゴリ」で「バッジ」(画像の1)を押すと、「ゴールした」と「初めて来た」が入っていました(画像の2)。

以下は、アソビシフト編集部がStudioのテストと持ち物の画面で確かめた結果です。

試したこと結果
1回目のテストでゲームに入る「(アカウント名) に「初めて来た」を渡しました」と出る
ゴールの床に乗る右下に「授与されたバッジ」、出力に「(アカウント名) に「ゴールした」を渡しました」
2回目のテストでゲームに入る「(アカウント名) はもう持っています: (バッジのID)」と出て、渡されない
ロブロックスの持ち物→バッジ2つとも入っていた

バッジがもらえないときの確かめ方

公式の説明にある、バッジを渡すための条件と、このコードの出力の文を結び付けました。

出力の文・様子考えられる原因直す場所
「(アカウント名) はもう持っています: (バッジのID)」その人がすでに持っている直す必要はない。スクリプトは動いていて、同じ人に2回渡さないようにしている
「が無効になっています」「バッジが有効です」がオフCreator Hubのバッジの設定
「渡せませんでした」別のゲームのバッジのIDを入れているバッジを作ったゲームの「エンゲージメント」→「バッジ」からIDをコピーし直す
「持っているか確かめられませんでした」「情報を取れませんでした」IDの数字がまちがっている、通信の失敗4・5行目のIDをコピーし直す。少し待ってもう一度試す
何も出ないScriptがServerScriptServiceにない、LocalScriptに書いているServerScriptServiceのScriptに入れる。バッジはクライアント側からは渡せない
何も出ず、数秒後に黄色い「Infinite yield possible」の警告が出るゴールの名前か場所が違う(7行目で待ち続けるため、「初めて来た」も渡されない)7行目の「FirstObby」「Goal」の名前がエクスプローラと同じか(Infinite yield possibleの直し方)

AIに相談するときの伝え方

Roblox Studioで、バッジを渡すスクリプトを作っています。
ServerScriptServiceのScriptで、BadgeServiceのUserHasBadgeAsync・GetBadgeInfoAsync・AwardBadgeAsyncを使い、ゴールのパーツに触れた人にバッジを渡しています。
(ここに今のコードを貼る)
3つのチェックポイントをすべて通った人にだけ、別のバッジを渡すように書きかえてください。古いAwardBadgeは使わないでください。

よくある質問

バッジを消すことはできる?

撮影したCreator Hubのバッジの画面には、消すボタンはありませんでした。渡すのをやめたいときは、バッジの設定で「バッジが有効です」をオフにします。この記事のコードでは、バッジの情報で有効になっていないと分かったときは渡さずに、出力に「バッジ「(バッジの名前)」が無効になっています」と出します。

バッジの並び順は変えられる?

バッジの画面の「順序変更」から変えられます。Robloxの公式の説明によると、一度に50個まで並べかえられます。

次のステップ(中級 16/28)

次は、お金をためて機械を買い足すタイクーンを作ります。

→ ロブロックス(Roblox)スタジオでタイクーンを作る方法

次に知りたいことを選ぶ

次に読む記事