前回は、Unity 6で複数のItemを配置し、PlayerがItemを取得するたびにTextMeshProのスコアが増える仕組みを作りました。
5つすべてのItemを取得すると、
Score: 5
まで増える状態になっています。
今回は、このスコアを利用してゲームのクリア条件を作ります。
具体的には、
Itemを取得する
↓
Scoreが増える
↓
Scoreが5になる
↓
GAME CLEAR!を表示する
という流れです。
ゲームには「何をすればクリアなのか」という目的が必要です。
今回はTextMeshProとC#を使って、これまで作ってきたゲームに簡単な終了条件を追加していきます。
前回のスコア表示についてはこちらの記事で解説しています。
Unity 6でスコアを表示する方法|TextMeshProでアイテム取得数をカウント
- 今回作るもの
- TextMeshProでGameClearTextを作成する
- GameClearTextの文字を設定する
- GameClearTextを画面中央に配置する
- ゲーム開始時はGameClearTextを非表示にする
- AIにゲームクリア処理を質問する
- ScoreManagerにゲームクリア処理を追加する
- gameClearTextをInspectorから設定する
- clearScoreでクリアに必要なスコアを設定する
- CheckGameClearでクリア条件を確認する
- なぜ「==」ではなく「>=」を使うのか
- Playモード開始時の状態を確認する
- Itemを取得してスコアを増やす
- 5つすべて取得するとGAME CLEAR!が表示される
- GAME CLEAR!が表示されない場合
- ゲームに目的と終了条件が追加された
- 今回のまとめ
- 次回はゲームクリア後にリスタートできるようにする
今回作るもの
現在のゲームでは、5つのItemを取得するとスコアが、
Score: 5
になります。
今回はCanvasに新しく、
GameClearText
を作成します。
ゲーム開始時にはGameClearTextを非表示にしておきます。
そして5つ目のItemを取得したときだけ、
GAME CLEAR!
と画面中央へ表示します。
今回の主な流れは、
- TextMeshProでGameClearTextを作成する
- GameClearTextを画面中央に配置する
- 最初はGameClearTextを非表示にする
- ScoreManagerへクリア条件を追加する
- GameClearTextをScoreManagerへ設定する
- Scoreが5になったか判定する
- 5つのItemを取得してGAME CLEAR!を表示する
となります。
TextMeshProでGameClearTextを作成する
前回作成したCanvasには、
ScoreText
があります。
今回は同じCanvasの中に、もう1つTextMeshProのTextを作成します。
Hierarchyから、
Canvas → UI → Text – TextMeshPro
を作成します。
作成したTextの名前を、
GameClearText
に変更します。
Hierarchyは、
Canvas
├─ ScoreText
└─ GameClearText
という状態になります。
GameClearTextの文字を設定する
GameClearTextを選択し、TextMeshProのTextを、
GAME CLEAR!
に変更します。
ゲームクリアしたことが一目で分かるように、ScoreTextよりも大きな文字にします。
例えば、
Font Size = 64
程度から始めます。
また、文字を中央揃えにしておくと見やすくなります。
ゲーム画面の大きさによって文字サイズは調整しても問題ありません。
GameClearTextを画面中央に配置する
次にGameClearTextを画面中央へ配置します。
Rect TransformのAnchor Presetsを使って、中央へ配置します。
Gameビューで、
GAME CLEAR!
が画面中央付近に表示されていればOKです。
幅が足りず文字が途中で改行された場合は、Rect TransformのWidthを広げます。
例えば、
Width = 600
Height = 120
程度にすると余裕があります。

ゲーム開始時はGameClearTextを非表示にする
ゲーム開始直後からGAME CLEAR!が表示されていると困ります。
そのため、ゲーム開始時にはC#からGameClearTextを非表示にします。
そしてスコアが5になったときだけ表示します。
今回はScoreManagerのStart()内で、
gameClearText.gameObject.SetActive(false);
を実行します。
SetActive(false)を使うと、そのGameObjectを非表示にできます。
反対に、
gameClearText.gameObject.SetActive(true);
とすると、再び表示できます。
AIにゲームクリア処理を質問する
今回もAIへ現在の状態を伝えて、ゲームクリア処理を追加する方法を質問します。
例えばChatGPTへ次のように質問します。
Unity 6で3Dゲームを作っています。
PlayerにはScoreManagerがあり、Itemを取得するたびにスコアが1増えます。
5つのItemをすべて取得するとScoreが5になります。
CanvasにTextMeshProでGameClearTextを作成しました。
ゲーム開始時はGameClearTextを非表示にし、Scoreが5になったら「GAME CLEAR!」を表示したいです。
現在のScoreManagerへ追加できる初心者向けのシンプルなC#コードを作ってください。

AIへ、
ScoreManagerを使用している
クリア条件はScore = 5
GameClearTextはTextMeshPro
最初は非表示
という条件を具体的に伝えます。
ScoreManagerにゲームクリア処理を追加する
前回作ったScoreManagerを修正します。
今回は次のようにします。
using TMPro;
using UnityEngine;
public class ScoreManager : MonoBehaviour
{
[SerializeField] private TMP_Text scoreText;
[SerializeField] private TMP_Text gameClearText;
[SerializeField] private int clearScore = 5;
private int score = 0;
private void Start()
{
gameClearText.gameObject.SetActive(false);
UpdateScoreText();
}
public void AddScore(int amount)
{
score += amount;
UpdateScoreText();
CheckGameClear();
}
private void UpdateScoreText()
{
scoreText.text = $"Score: {score}";
}
private void CheckGameClear()
{
if (score >= clearScore)
{
gameClearText.gameObject.SetActive(true);
}
}
}

保存したらUnityへ戻り、Consoleに赤いエラーが表示されていないことを確認します。
gameClearTextをInspectorから設定する
今回追加した、
[SerializeField] private TMP_Text gameClearText;
によって、PlayerのScoreManagerに、
Game Clear Text
という項目が追加されます。
ここへHierarchyの、
Canvas → GameClearText
をドラッグします。
前回のScoreTextと同じように、InspectorからTextMeshProのオブジェクトをC#スクリプトへ渡しています。
最終的にScoreManagerには、
Score Text = ScoreText
Game Clear Text = GameClearText
Clear Score = 5
が設定されます。

clearScoreでクリアに必要なスコアを設定する
今回のコードでは、
[SerializeField] private int clearScore = 5;
を追加しています。
この変数には、ゲームクリアに必要なスコアを保存します。
今回はItemが5個あるため、
Clear Score = 5
です。
このように数字を変数として用意しておくと、後からItemを10個に増やした場合でも、
Clear Score = 10
へ変更できます。
コード内に直接5を書くよりも、Inspectorから設定できるようにしておくと調整しやすくなります。
CheckGameClearでクリア条件を確認する
今回追加した、
private void CheckGameClear()
{
if (score >= clearScore)
{
gameClearText.gameObject.SetActive(true);
}
}
がゲームクリアを判定する部分です。
Itemを取得するたびにAddScore()が実行されます。
その中で、
CheckGameClear();
を呼び出します。
例えばScoreが4の場合、
4 >= 5
ではないため、GAME CLEAR!は表示されません。
5つ目のItemを取得すると、
5 >= 5
となるため条件が成立します。
そこで、
gameClearText.gameObject.SetActive(true);
が実行されます。
なぜ「==」ではなく「>=」を使うのか
ゲームクリアの判定には、
score >= clearScore
を使用しています。
今回のように必ず1ずつ増える場合は、
score == clearScore
でも動作します。
ただし将来的に、1つのItemで2ポイント増えるなどの仕組みを追加すると、スコアがクリア条件を飛び越える可能性があります。
そのため、
クリアに必要なスコア以上になったらクリア
という意味になる>=を使っています。
Playモード開始時の状態を確認する
設定が終わったらPlayボタンを押します。
ゲーム開始時には、
Score: 0
が表示されます。
一方、
GAME CLEAR!
は表示されていないことを確認します。
これでStart()内の、
gameClearText.gameObject.SetActive(false);
が正常に動作していることが分かります。
Itemを取得してスコアを増やす
PlayerをW・A・S・Dキーで操作してItemを取得します。
1つ目を取得すると、
Score: 1
2つ目を取得すると、
Score: 2
と増えていきます。
Scoreが1〜4の間は、まだGAME CLEAR!を表示しません。
最後のItemを取得するまでゲームを続けます。
5つすべて取得するとGAME CLEAR!が表示される
最後のItemを取得すると、
Score: 5
になります。
同時に画面中央へ、
GAME CLEAR!
と表示されれば成功です。

これで、
PlayerがItemを集める
↓
スコアが増える
↓
5つすべて取得する
↓
ゲームクリアになる
という一連のゲームルールが完成しました。
GAME CLEAR!が表示されない場合
Scoreが5になってもGAME CLEAR!が表示されない場合は、まずPlayerを選択します。
ScoreManagerの、
Game Clear Text
にGameClearTextが設定されているか確認してください。
さらに、
Clear Score = 5
になっていることも確認します。
次にScoreManager.csが今回の新しいコードになっているか確認します。
Consoleに赤いエラーが表示されている場合は、そのエラー内容も確認してください。
Scoreそのものが増えない場合は、前回の記事で設定した、
ItemPickup
ScoreManager
ScoreText
の設定も確認します。
ゲームに目的と終了条件が追加された
これまでのゲームではPlayerを移動したり、Itemを取得したりすることはできましたが、「何をすればゲームをクリアできるのか」という明確な目的はありませんでした。
今回、
5つのItemを集める
という目的と、
Scoreが5になったらGAME CLEAR!
という終了条件を追加しました。
シンプルではありますが、これによってゲームとしての基本的な流れができました。
ゲーム制作では、
開始
↓
プレイヤーが操作する
↓
目的を達成する
↓
結果を表示する
という流れを作ることが重要です。
今回のまとめ
今回はUnity 6でゲームクリアの仕組みを作りました。
TextMeshProでGameClearTextを作成し、ゲーム開始時には非表示にしています。
ScoreManagerには、
clearScore
gameClearText
CheckGameClear()
を追加しました。
Itemを取得するたびに現在のScoreとClear Scoreを比較し、
score >= clearScore
になった場合に、
gameClearText.gameObject.SetActive(true);
を実行します。
これによって5つのItemをすべて取得すると、画面中央へGAME CLEAR!が表示されるようになりました。
これまで作ってきたPlayer移動、Collider、Item取得、スコア表示がつながり、簡単なゲームの基本ループができました。
次回はゲームクリア後にリスタートできるようにする
現在はGAME CLEAR!が表示されても、そのままPlayerを操作できます。
次回はゲームクリア画面に、
RESTART
ボタンを追加します。
ボタンを押すと現在のSceneを最初から読み込み、
Score: 0
Itemが5個ある状態
からもう一度プレイできるようにします。
ここではUnityのButtonとSceneManagerを使い、ゲームを繰り返し遊べる仕組みを追加していきます。
