AIにたのんで、コインの数をスコアとして画面に出そう
動作確認日: 2026年10月20日(Roblox Studio 0.743)
連載「AIといっしょにゲームを作ろう」のコインあつめゲームの2回めです。前の回(土台を作る)を読む
前の回で、足場とコインがあって、さわるとコインが消える「土台」ができました。でも、いくつ取ったのかは、どこにも出ていません。
今回は、取ったコインの数を、画面にスコアで出します。
今回作るもの
- 画面の左上に「コイン: 0 / 5」と出す
- コインを取るたびに、数が1つ増える
- 5つ全部取ったら、「ぜんぶ集めた!」に変わる
ゴール(ゲームの終わり)は、次の回で作ります。今回も、「ここまで」と区切ってたのむのがコツです。
ChatGPTにたのむ
前の回で作った作品を、スタジオで開いたまま、ChatGPTに次の文を送ります。
さっき作った「コインあつめダッシュ」に、スコア表示を足してください。
今回は、コインを取った数を画面に出すところまでです。
【作るもの】
1. 画面の左上に「コイン: 0 / 5」と表示する。
2. コインを1つ取るたびに、数字が1つ増える。
3. 5つ全部取ったら、表示を「ぜんぶ集めた!」に変える。
【ルール】
- ゴール(ゲームの終わり)は、次の回で作るので、今回は作らないでください。
- 今までに作った足場とコインは、変えないでください。
- 名前は分かりやすくしてください(例:ScoreGui、ScoreScript)。
- 小学生が読めるように、スクリプトの中に日本語のコメントをつけてください。
【最後にお願い】
作り終わったら、次の3つを、やさしい言葉で教えてください。
- 何を足したか
- スコアが増える部分は、どのスクリプトのどこか
- コインのスクリプトと、スコアのスクリプトは、どうつながっているか
前の回と同じ形です。変えたのは、次の2つです。
- 「今までに作ったものは、変えないでください」と、最初に書く:前の回で作った足場とコインを、守ってもらいます
- 「つながり」を説明してもらう:今回は、スクリプトが2つ以上になるからです
できあがりを見る
約41秒で、ChatGPTから次の返事が来ました。

返事を読むと、次のことがわかります。
- 足したもの:左上の表示用のScoreGui、数を数えるScoreScript、表示を書きかえるScoreDisplayScriptの3つ
- スコアが増えるところ:ServerScriptServiceのScoreScriptにある、
player:SetAttribute("CoinCount", ...)の行 - つながり:コインにさわると、CoinScriptがScoreScriptに「1つ取ったよ!」と知らせます。すると数が増えて、ScoreDisplayScriptが画面の文字を書きかえます
「ゴールは作っていません。足場やコインの見た目・動きはそのままです」とも書いてあります。たのんだ「ここまで」を、守ってくれました。
遊んでみる
- 画面の上の「▶(プレイ)」を押します
- 左上に、「コイン: 0 / 5」と出ています
- 足場を渡って、コインにさわります。取るたびに、数が1つずつ増えます

5つ全部取ると、表示が変わります。

問題なく動きました。 今回は、直してもらう必要はありませんでした。このように、一度でうまくいくこともあります。うまくいかなかったときは、前の回のように、そのままChatGPTに伝えて直してもらいましょう。
どこに増えたか見てみる
■(停止)を押して編集の画面にもどり、右のエクスプローラーを見てみましょう。2か所に追加されています。
- StarterGuiの中に、ScoreGui(画面に出す表示)があります。開くと、ScoreLabel(文字)とScoreDisplayScript(文字を書きかえるスクリプト)が入っています
- ServerScriptServiceの中に、ScoreScript(数を数えるスクリプト)があります

StarterGuiは、プレイヤーの画面に出すものを入れる場所です。ServerScriptServiceは、ゲームの中身を動かすスクリプトを入れる場所です。画面に出す係と、数える係が、別の場所に分かれています。
スクリプトを読んでみる
今回は、スクリプトが3つあります。つながりを見ながら、読んでいきましょう。
コイン(CoinScript) → 数える係(ScoreScript) → 画面に出す係(ScoreDisplayScript)
1. 数える係:ScoreScript
ServerScriptServiceのScoreScriptです。
-- コインを取った数をおぼえる、スコアの係だよ。
local ScoreScript = {}
function ScoreScript.AddCoin(player)
-- まだ数がなければ、0から始めるよ。
local count = player:GetAttribute("CoinCount") or 0
-- コインの数を1つ増やすよ。画面にも、この数が届くよ。
player:SetAttribute("CoinCount", math.min(count + 1, 5))
end
return ScoreScript
function ScoreScript.AddCoin(player):「AddCoin(コインを足す)」という名前の、命令のかたまりを作っています。ほかのスクリプトから呼び出して使えます。playerは、コインを取った人ですplayer:GetAttribute("CoinCount"):その人に、「CoinCount」という名前でおぼえさせておいた数を、取り出します。属性(アトリビュート)という、名前つきのメモのようなものです。まだ何もなければor 0で、0になりますplayer:SetAttribute("CoinCount", math.min(count + 1, 5)):今の数に1を足して、おぼえさせます。math.min(..., 5)は、5より大きくならないようにする、という意味です
このスクリプトは、ModuleScript(モジュールスクリプト)という種類です。自分では動かず、ほかのスクリプトに呼ばれて、はじめて動く、道具箱のようなスクリプトです。
2. 知らせる側:CoinScript
前の回のコインのスクリプト(Coin1〜5の中のCoinScript)に、3行足しています。
-- 何回も取らないようにして、コインを消すよ。
collected = true
-- スコアの係に、コインを1つ取ったと知らせるよ。
local ScoreScript = require(game:GetService("ServerScriptService"):WaitForChild("ScoreScript"))
ScoreScript.AddCoin(player)
coin:Destroy()
require(...):ServerScriptServiceのScoreScriptを、呼び出して使えるようにしますScoreScript.AddCoin(player):さっきのAddCoinを呼んで、「この人が、コインを1つ取ったよ!」と知らせます
そのあとの coin:Destroy() は、前の回と同じで、コインを消します。前の回で作ったものは、そのまま残っています。
3. 画面に出す係:ScoreDisplayScript
StarterGuiのScoreGuiの中にあるScoreDisplayScriptです。
-- 自分のコインの数を、画面に出す係だよ。
local player = game:GetService("Players").LocalPlayer
local label = script.Parent:WaitForChild("ScoreLabel")
local function updateScore()
local count = player:GetAttribute("CoinCount") or 0
if count >= 5 then
-- 全部取れたら、ことばを変えるよ。ゲームは続くよ。
label.Text = "ぜんぶ集めた!"
else
label.Text = "コイン: " .. count .. " / 5"
end
end
-- 数が変わるたびに、画面を書きかえるよ。
player:GetAttributeChangedSignal("CoinCount"):Connect(updateScore)
updateScore()
local player = ...LocalPlayer:いま遊んでいる自分ですlocal label = script.Parent:WaitForChild("ScoreLabel"):画面の文字(ScoreLabel)を、labelという名前でおぼえますif count >= 5 then ... else ... end:もし5つ以上なら「ぜんぶ集めた!」、そうでなければ「コイン: 数 / 5」と出します。第7回の「もし〜なら」です。..は、文字をつなげる記号ですGetAttributeChangedSignal("CoinCount"):Connect(updateScore):CoinCountが変わるたびに、updateScoreを動かします。第8回の「さわったら〇〇する」と、同じ考え方です
つながりをまとめます
ScoreScriptとScoreDisplayScriptは、直接おしゃべりしていません。ScoreScriptがプレイヤーの属性(CoinCount)を書きかえて、ScoreDisplayScriptがその変化を見て画面を書きかえます。属性が、2つのスクリプトの間の連絡メモです。
ためしに、数字を変えてみましょう
「ぜんぶ集めた!」は、count >= 5 のところで決まっています。この5を、3に変えてみましょう。
- 「■(停止)」を押して、編集の画面にもどります
- エクスプローラーで、StarterGuiの中のScoreGuiを開いて、ScoreDisplayScriptをダブルクリックします
if count >= 5 thenの5だけを、3に書きかえます- 「▶(プレイ)」を押して、コインを3つ取ります
3つ取った時点で、「ぜんぶ集めた!」に変わります。 ただし、5つ取るまでは「コイン: 2 / 5」のように出るので、数がちぐはぐです。ためしたら、3 を 5 にもどしておきましょう。
読めれば、直せます。 どこの数字が、何を決めているのかが、わかりました。
もっといい、たのみ方
- 今までに作ったものは「変えないでください」と、先に書く:足したいところだけ、足されます
- 名前を決めておく:ScoreGui、ScoreScriptのように決めておくと、エクスプローラーで探せます
- 「つながり」を説明してもらう:スクリプトが増えるほど、どれが何をしているのか、わからなくなります。AIの説明と自分で読んだものを見くらべましょう
つぎは
次の回では、コインを全部取ったらゴールになる仕組みを足します。ChatGPTに直してもらう場面も、出てくる予定です。
