こんにちは、パパコーダーです!
第9回では、いよいよこのゲームのゴールとなる
「60秒生き残れたらゲームクリア!」 の仕組みを作っていきます。
これまでは「動く主人公」と「動き回るボール」を作りました。
今回はそれに時間制限を加えて、きちんと勝ち負けのあるゲームにしていきます。
- ⏱ 60秒生存のクリア判定を作ろう(時間で勝利!)
- 🔜 次回:第10回「ゲームオーバー判定(ボールに当たったらアウト!)」
⏱ 60秒生存のクリア判定を作ろう(時間で勝利!)
⏱ 1. ルールを決めよう(60秒生存)
このゲームのルールはシンプルです。
- スタートしたらボールが動き出す
- 主人公はボールをよけ続ける
- 60秒間当たらなければクリア!
Scratch版では、変数 「あと」 を 60 から 0 までカウントダウンして、
0 になった(またはマイナスになった)タイミングで「クリア」メッセージを送っています。
FUnity版でも、この動きをほぼそのまま再現していきます。
🎭 2. 背景用スクリプトを動かす「非表示Actor」を作る
Scratch では「背景」に直接スクリプトを書けますが、
FUnity では背景には Script Graph がありません。
そこで、背景の代わりに裏方担当の Actorを 1 つ作り、
- BGM を鳴らす
- 背景を切り替える
- 変数「あと」をカウントダウンする
- 0 秒になったら「クリア」を送る
という処理をまとめて任せることにします。
▼ GameManager Actor を作る
- FUnity → Create → FUnityActorData を選択
- 名前を GameManager(または BackgroundController など)にする
この Actor は画面に見せる必要がないので、
Sprite は透明画像にするか、ステージの外に置いておいてもOKです。
作成したら、BallAvoidance_ProjectData の Actors に追加しておき、
GameManager_ScriptGraph.asset の [Edit Graph] を押して、スクリプト編集画面を開きます。

🔊 3. BGM をずっと鳴らす(Scratch 左上のスクリプト)
まずは、Scratch の「終わるまで <Dance Magic> の音を鳴らす」を再現します。
▼ FUnitySoundData を作る
- FUnity → Create → FUnitySoundData を選択
- Sounds に BGM となる AudioClip を設定する

Free の BGM をインポートして使わせていただきました。

- 緑の旗が押されたとき
- ずっと
- 終わるまで音を鳴らす


これだけで、ゲーム中は BGM がループ再生されます。
音の名前は、FUnitySoundData の Sounds に設定した Id に置き換えてください。
このスクリプトはBGM専用なので、他の処理(カウントダウン等)とは別の緑の旗イベントに分けておくと安全です。
🖼 4. 背景を切り替える(Scratch 右上のスクリプト)
次に、Scratch の「背景を pico-a6 にする → 4 回繰り返す → 次の背景にする」スクリプトに相当する処理です。
- 緑の旗が押されたとき
- 背景を〇にする
- 4回繰り返す
- 次の背景にする
FUnity では、StageData に登録した背景 Sprite を切り替える Unit を使って、
同じような見た目の演出を付けてあげましょう。

「4 回繰り返す」のところは、好きな回数や間隔に変えてしまっても問題ありません。


🔢 5. 残り秒数「あと」をカウントダウンする(Scratch 左下)
いよいよ時間制限の中心部分です。
Scratch では、変数 「あと」 を使ってカウントダウンしています。
▼ 変数「あと」を用意する
- 変数名:あと
- 初期値:60
- 意味:ゲーム終了までの残り秒数
FUnity では FUnityProjectData の Global Variables に変数を追加します。

▼ Scratch と同じカウントダウン処理


このロジックを Visual Scripting で組めば、
1 秒ごとに「あと」が 60 → 59 → 58 → … → 0 → -1 … と減っていきます。
🏁 6. 0 になったら「クリア」を送る(Scratch 右下)
Scratch の右下のスクリプトでは、

という形で、残り時間が 0 になったか、マイナスになったかを判定しています。

FUnity でも同じイメージで、GameManager の Script Graph に
次のような処理を追加します。
- 緑の旗が押されたとき
- If(「あと = 0」 または 「あと < 0」)
- → メッセージを送る「クリア」
こうしておくことで、タイミングのズレで「あと」が -1 になってしまっても、
ちゃんとゲームクリアになります。
✨ 7. 「CLEAR!!」を表示する Actor を作る(Scratch クリア用スプライト)
次は、ゲームクリア時に表示される文字やイラストを担当する Actor を作ります。
▼ ClearActor を作る
- FUnity → Create → FUnityActorData から新しい Actor を作成して、名前を ClearActor にする
- Sprites に「CLEAR!!」などの文字画像を設定する

FUnityProjectData の Actors に ClearActor を追加します。

そして Script Graph を開き、上の Scratch と同じように、
- 緑の旗を押したとき で 隠す(最初は非表示)
- 「クリア」を受け取ったら 表示する
- 「ゲームオーバー」を受け取ったら 隠す(または ずっと → 隠す)
といった処理を組んでおきます。
これで、クリアのときだけ画面に出てくる表示が完成します。






🧪 8. テストしてみよう
Unity の 再生(▶)ボタン を押して、次の点を確認します。
- BGM が流れ続けるか
- 背景が切り替わっているか
- 残り時間「あと」が 60 → 0 とカウントダウンしているか
- 0 秒(またはマイナス)になったときに「クリア」メッセージが送られ、ClearActor が表示されるか
テストが大変なときは、変数「あと」の初期値を 5 などに変えて、
すぐにクリア判定が走るようにしてチェックすると楽です。
🌟 今回できたこと
- 背景の代わりに「非表示Actor(GameManager)」を作って、ゲーム全体の進行を管理した
- BGM 再生と背景切り替えを Script Graph で実装した
- 変数「あと」を 60 から 0 までカウントダウンする処理を作った
- 「あと = 0」またはマイナスになったときに「クリア」メッセージを送る仕組みを作った
- 「クリア」を受け取ったときだけ表示される ClearActor を実装した
これで「60秒逃げ切ったら勝ち!」というゲームのゴール部分が、
Scratch とほぼ同じ構成で FUnity にも入りました。
🔜 次回:第10回「ゲームオーバー判定(ボールに当たったらアウト!)」
次回は、ボールに当たったらゲームオーバー になる仕組みを作ります。
「60秒生存」と「当たったらアウト」の両方がそろうことで、
いよいよ完成形に近いゲームになります!


コメント