ども!カトサンラボのかとこうです。
この記事は、
「ChatGPTとUnityでブロック崩しを作る基礎講座」
の7番目の記事です。
今回は、
「ブロック崩しのゲームクリアのプログラムを作る」
という作業について
お伝えをしていきますね。
この記事で行う作業は全部で9つです。
といった内容になっています。
今回はクリア時にゲームを停止する処理を
作っているので、前回作った
「ゲームオーバーの時にゲームを停止させたい」
といった処理を作る際にも
応用ができると思います。
ということで、まずは1つ目の作業から
解説していきますね!
1、ChatGPTでゲームクリアの作り方を確認する
まずはChatGPTで
「ブロック崩しでのゲームクリアの作り方」
を確認していきましょう。
ChatGPTを開いたら、チャット欄に
「ブロックを全て壊したらゲームクリアになるようにしたい。作り方を教えて」
と入力して送信します。
![チャットGPTにブロック崩しのゲームクリアの作り方を尋ねる画像](https://katosanlaboratory.jp/wp-content/uploads/2024/08/breakoutgameclearmake1.jpg)
そうすることで、ゲームクリアの
作り方について書き出してくれます。
ChatGPTの返答
![ブロック崩しのゲームクリアの作り方についての返答1](https://katosanlaboratory.jp/wp-content/uploads/2024/08/breakoutgameclearmake2.jpg)
![ブロック崩しのゲームクリアの作り方についての返答2](https://katosanlaboratory.jp/wp-content/uploads/2024/08/breakoutgameclearmake_3.jpg)
![ブロック崩しのゲームクリアの作り方についての返答3](https://katosanlaboratory.jp/wp-content/uploads/2024/08/breakoutgameclearmake_4.jpg)
![ブロック崩しのゲームクリアの作り方についての返答4](https://katosanlaboratory.jp/wp-content/uploads/2024/08/breakoutgameclearmake5.jpg)
そして、書かれた返答を見て、
ゲームクリアを作る方法を確認します。
2、BlockControllerスクリプトの修正をする
ゲームクリアの作り方を確認したら、まずは
「BlockControllerスクリプトの修正」
から行なっていきます。
プロジェクトウインドウにある
BlockControllerスクリプトを
ダブルクリックして開きましょう。
ヴィジュアルスタジオなどで
スクリプトの中身が表示されます。
![コードエディタでBlockControllerスクリプトの内容が表示された画像](https://katosanlaboratory.jp/wp-content/uploads/2024/08/breakoutgameclearmake6.jpg)
その後、ChatGPTからコードをコピーしてきます。
![チャットGPTが生成したコードをコピーする画像](https://katosanlaboratory.jp/wp-content/uploads/2024/08/breakoutgameclearmake7.jpg)
そして、コピーしたプログラムのコードを
BlockControllerスクリプトに貼り付けて
上書きします。
内容を全て選択した後に、
![BlockControllerの内容を全て選択した画像](https://katosanlaboratory.jp/wp-content/uploads/2024/08/breakoutgameclearmake8.jpg)
コピーしたコードを貼り付けしました。
![チャットGPTからコピーしたコードを貼り付けた画像](https://katosanlaboratory.jp/wp-content/uploads/2024/08/breakoutgameclearmake9.jpg)
今回使用したBlockControllerの修正コード
using UnityEngine;
public class BlockController : MonoBehaviour
{
private GameController gameController; // 追加
void Start()
{
gameController = FindObjectOfType<GameController>(); // 追加
}
void OnCollisionEnter2D(Collision2D collision)
{
if (collision.gameObject.CompareTag("Ball"))
{
// ブロックを破壊する
Destroy(gameObject);
// GameControllerのブロック破壊メソッドを呼び出す
gameController.BlockDestroyed(); // 追加
}
}
}
そうしたらメニューのファイルから保存を
クリックしてセーブしましょう。
これで、修正は完了です。
修正が完了すると、エラーの表示が出ましたが、
これは気にせず先に進んで大丈夫です。
![エラーが出ていますが、後の作業でなおるので気にせず進めます](https://katosanlaboratory.jp/wp-content/uploads/2024/08/breakoutgameclearmake10.jpg)
3、ゲームのクリアを管理するオブジェクトの作成
次はゲームのクリアを管理するための
ゲームオブジェクトを作っていきましょう。
ゲームクリアの管理を行うオブジェクトとして、
「見えないオブジェクト」を作ります。
ヒエラルキーの+ボタンをクリックして
出てきたメニューから
「Create Empty」
をクリック。
![ヒエラルキーのメニューから「Create Empty」をクリックした画像](https://katosanlaboratory.jp/wp-content/uploads/2024/08/breakoutgameclearmake11.jpg)
そうすると新しいオブジェクトが作られました。
そして名前が変更できるので、
「GameController」
と入力をして決定。
![新しく作られたオブジェクトの名前を変更した画像](https://katosanlaboratory.jp/wp-content/uploads/2024/08/breakoutgameclearmake12.jpg)
これでゲームクリアを管理する
オブジェクトの作成は完了です。
4、ゲームのクリアを管理するプログラムを作る
次はゲームクリアを管理するための
プログラムを作っていきましょう。
プロジェクトウインドウの
+ボタンをクリックして、
C# Scriptを作成。
![ProjectウインドウのメニューからC# Scriptを選んでクリックする画像](https://katosanlaboratory.jp/wp-content/uploads/2024/08/breakoutgameclearmake13.jpg)
新しく作られたC#スクリプトの名前を
「GameController」に変更しました。
新しいスクリプトが作れたら、
ダブルクリックをして開きます。
![コードエディターでGameControllerスクリプトの内容が表示された画像](https://katosanlaboratory.jp/wp-content/uploads/2024/08/breakoutgameclearmake14.jpg)
そしてビジュアルスタジオなどで
表示がされたら、
ChatGPTの画面に移動して、
生成されたコードをコピーします。
![チャットGPTが生成したプログラムのコードをコピーする画像](https://katosanlaboratory.jp/wp-content/uploads/2024/08/breakoutgameclearmake15.jpg)
そうしたら、スクリプトの内容を
全て選択して、
![GameControllerの内容を全て選択した画像](https://katosanlaboratory.jp/wp-content/uploads/2024/08/breakoutgameclearmake16.jpg)
その後、コピーしたプログラムを
貼り付けて上書きをしました。
![チャットGPTからコピーしてきたプログラムのコードを貼り付けた画像](https://katosanlaboratory.jp/wp-content/uploads/2024/08/breakoutgameclearmake17.jpg)
今回使用したGameControllerのコード
using UnityEngine;
using UnityEngine.SceneManagement; // シーン管理のために追加
public class GameController : MonoBehaviour
{
public int totalBlocks; // 総ブロック数
private int blocksDestroyed; // 破壊されたブロック数
void Start()
{
// 総ブロック数を設定(ステージごとに調整する必要があります)
totalBlocks = GameObject.FindGameObjectsWithTag("Block").Length;
blocksDestroyed = 0;
}
public void BlockDestroyed()
{
blocksDestroyed++;
CheckGameOver();
}
void CheckGameOver()
{
// 破壊されたブロック数が総ブロック数に達したらゲームクリア
if (blocksDestroyed >= totalBlocks)
{
Debug.Log("Game Clear!");
// ここにゲームクリア時の処理を追加(例えば次のステージへ移行するなど)
// またはゲームクリアUIを表示するなどの処理を追加します。
// 例えば、SceneManager.LoadScene("GameClearScene"); のように次のシーンに遷移する処理も追加できます。
}
}
}
そうしたらメニューのファイルから保存を選んで
クリックしましょう。
これでプログラムが作れました。
このGameControllerスクリプトを作ったことで
BlockControllerスクリプトのエラーも消えます。
プログラムができたら、
次は管理を行うオブジェクトに
スクリプトを付けていきます。
ヒエラルキーでGameController
オブジェクトをクリックして
インスペクターを表示させます。
![GmaeControllerオブジェクトをクリックしてインスペクターを表示した画像](https://katosanlaboratory.jp/wp-content/uploads/2024/08/breakoutgameclearmake18.jpg)
そうしたら、プロジェクトウインドウにある、
GameControllerスクリプトを
クリックしたまま動かして、
インスペクターのアドコンポーネントの
あたりに持っていったらクリックを離します。
![GmaeControllerスクリプトをインスペクターにつける画像](https://katosanlaboratory.jp/wp-content/uploads/2024/08/breakoutgameclearmake19.jpg)
これでインスペクターに表示されたらOKです。
![GameControllerスクリプトがインスペクターに表示された画像](https://katosanlaboratory.jp/wp-content/uploads/2024/08/breakoutgameclearmake20.jpg)
5、タグの作成と設定をする
今回のプログラムを動作させるためには、
Blockにタグをつける必要があります。
まず、Blockのプレハブをダブルクリックして
インスペクターを表示させます。
![Blockプレハブのインスペクターを表示した画像](https://katosanlaboratory.jp/wp-content/uploads/2024/08/breakoutgameclearmake21.jpg)
そしてTagの右にある
「Untagged」
という部分をクリックします。
![インスペクターのTagの横にある「Untagged」をクリックする画像](https://katosanlaboratory.jp/wp-content/uploads/2024/08/breakoutgameclearmake22.jpg)
そして出てきたメニューから
「Add Tag」
をクリックしましょう。
![Tagのメニューから「Add Tag」をクリックする画像](https://katosanlaboratory.jp/wp-content/uploads/2024/08/breakoutgameclearmake23.jpg)
そうするとタグを作成する画面が
表示されました。
![Tagの作成と管理をする画面が表示された画像](https://katosanlaboratory.jp/wp-content/uploads/2024/08/breakoutgameclearmake24.jpg)
ここの+ボタンをクリックすると
新しいタグを作れるんですね。
![Tagのメニューから+ボタンをクリックした画像](https://katosanlaboratory.jp/wp-content/uploads/2024/08/breakoutgameclearmake25.jpg)
名前を入力する欄に
「Block」
と入力したらSaveをクリックします。
![新しく作るTagをBlockに変更してSaveする画像](https://katosanlaboratory.jp/wp-content/uploads/2024/08/breakoutgameclearmake26.jpg)
これでタグの作成は完了です。
![新しくBlockタグが作られた画像](https://katosanlaboratory.jp/wp-content/uploads/2024/08/breakoutgameclearmake27.jpg)
タグが作れたら、次はタグの設定です。
今回はBlockにタグを設定していきたいので、
プロジェクトウインドウにある
ブロックのプレハブをダブルクリックしましょう。
そして、インスペクターが表示されたら
タグをクリックします。
![Blockプレハブのインスペクターを表示させた画像](https://katosanlaboratory.jp/wp-content/uploads/2024/08/breakoutgameclearmake28.jpg)
Tagのメニューが表示されたら、
先ほど作ったBlockタグを選んでクリック。
![BlockプレハブのインスペクターのTagのメニューからBlockタグを選んでクリックする画像](https://katosanlaboratory.jp/wp-content/uploads/2024/08/breakoutgameclearmake29.jpg)
これでブロックプレハブに
タグを設定することができました。
![BlockプレハブのタグをBlockに変更した画像](https://katosanlaboratory.jp/wp-content/uploads/2024/08/breakoutgameclearmake30.jpg)
ヒエラルキーで配置してあるブロックを
確認してみると、タグがちゃんと設定されていました。
6、テストプレイをして確認する
ここまでできましたら、テストプレイをして
ゲームクリアのプログラムがちゃんと
できているか確認していきましょう。
そしてテストプレイを行う前に、
少し設定を行います。
まずは、ゲームクリアの
確認をしやすくするために、
ブロックの表示を一時的に消します。
まずはブロックの2段目である
2ndBlockをクリックして
インスペクターを表示します。
![2ndBlockのインスペクターを表示した画像](https://katosanlaboratory.jp/wp-content/uploads/2024/08/breakoutgameclearmake32.jpg)
そうしたら名前の横にある
チェックボックスのチェックを外し、
2段目のブロックを非表示にしておきます。
![2ndBlockのチェックを外して非表示にした画像](https://katosanlaboratory.jp/wp-content/uploads/2024/08/breakoutgameclearmake33.jpg)
2段目のブロックを非表示にしたら、
3段目のブロックも同じようにして
非表示にしました。
![2段目と3段目のブロックを非表示にした画像](https://katosanlaboratory.jp/wp-content/uploads/2024/08/breakoutgameclearmake34.jpg)
あとは1段目のブロックの数も
少なくしたいので、ヒエラルキーで
1stBlockの左にある「▶︎」をクリックして
子要素を表示します。
![1stBlockの子要素を表示した画像](https://katosanlaboratory.jp/wp-content/uploads/2024/08/breakoutgameclearmake35.jpg)
そして、この子要素のBlockを1つ残して
非表示にしていきます。
Blockのプレハブを複数選択してから
インスペクターのチェックボックスを
クリックしてチェックを外しました。
![複数選択をしてBlockプレハブの表示を消しました](https://katosanlaboratory.jp/wp-content/uploads/2024/08/breakoutgameclearmake_36.jpg)
そしてブロックを1つにしたら、
次はGameControlleのインスペクターを
見ていきますが、スクリプトの項目で
「ブロックの数」
を設定できるようになっています。
ここに「1」と入れておきました。
![ブロックの数を設定する項目に1と入力した画像](https://katosanlaboratory.jp/wp-content/uploads/2024/08/breakoutgameclearmake31.jpg)
一応設定しましたが、ここの数字はゲームが
始まると勝手にブロックの数が計算されて
ブロックの数の値に変わります。
これで設定はOKなので、シーンビューの
上にあるプレイボタンをクリックして
テストプレイを行いましょう。
![テストプレイを開始する画像](https://katosanlaboratory.jp/wp-content/uploads/2024/08/breakoutgameclearmake37.jpg)
テストプレイが始まったら、
ブロックを全て壊します。
そうしますと、プロジェクトウインドウの
部分にあるコンソールにクリアのログが
表示されました。
![コンソールに「Game Clear!」と表示された画像](https://katosanlaboratory.jp/wp-content/uploads/2024/08/breakoutgameclearmake38.jpg)
しかし、ゲームはそのまま動いている状態です。
確認ができたらプレイボタンをもう一度押して、
テストプレイを終了します。
ここから、クリア時にゲームをストップする
プログラムを追加していきますね。
7、ChatGPTでゲームを停止する処理の作り方を確認する
次はクリアした時にゲームを停止する
プログラムの作り方について
ChatGPTで確認をしていきます。
ChatGPTの画面を開いたらチャット欄に、
「ゲームクリア時に画面をストップしたい」
と入力して送信します。
そうすると返答が返ってきましたので、
ChatGPTの返答
![ゲームクリア時に画面をストップするやり方についての返答1](https://katosanlaboratory.jp/wp-content/uploads/2024/08/breakoutgameclearmake39.jpg)
![ゲームクリア時に画面をストップするやり方についての返答2](https://katosanlaboratory.jp/wp-content/uploads/2024/08/breakoutgameclearmake_40.jpg)
書かれた内容を見て作り方を確認しました。
8、GameControllerスクリプトを修正する
ゲームクリアをした時のプログラムを
修正するために、
「GameControllerスクリプトの修正」
をしていきましょう。
プロジェクトウインドウにある
GameControllerスクリプトを
ダブルクリックして開きます。
![修正するGmaeControllerスクリプトの内容を表示した画像](https://katosanlaboratory.jp/wp-content/uploads/2024/08/breakoutgameclearmake_41.jpg)
そして内容が表示されたら、
ChatGPTで生成されたコードをコピー。
![修正するコードをコピーした画像](https://katosanlaboratory.jp/wp-content/uploads/2024/08/breakoutgameclearmake42.jpg)
その後スクリプトの内容全て選択してから、
![修正するGameControllerの内容を全て選択しました](https://katosanlaboratory.jp/wp-content/uploads/2024/08/breakoutgameclearmake_43.jpg)
コピーした修正コードを貼り付けて
上書きをしました。
![GameControllerスクリプトにコピーしてきた修正コードを貼りつけた画像](https://katosanlaboratory.jp/wp-content/uploads/2024/08/breakoutgameclearmake_44.jpg)
今回使用したGameControllerの修正コード
using UnityEngine;
using UnityEngine.SceneManagement;
public class GameController : MonoBehaviour
{
public int totalBlocks; // 総ブロック数
private int blocksDestroyed; // 破壊されたブロック数
private bool isGameClear; // ゲームクリアフラグ
void Start()
{
// 総ブロック数を設定(ステージごとに調整する必要があります)
totalBlocks = GameObject.FindGameObjectsWithTag("Block").Length;
blocksDestroyed = 0;
isGameClear = false;
}
public void BlockDestroyed()
{
blocksDestroyed++;
CheckGameClear();
}
void CheckGameClear()
{
// 破壊されたブロック数が総ブロック数に達したらゲームクリア
if (blocksDestroyed >= totalBlocks && !isGameClear)
{
Debug.Log("Game Clear!");
isGameClear = true;
Time.timeScale = 0f; // ゲームを停止する
// ここにゲームクリア時の処理を追加(例えば次のステージへ移行するなど)
// またはゲームクリアUIを表示するなどの処理を追加します。
// 例えば、SceneManager.LoadScene("GameClearScene"); のように次のシーンに遷移する処理も追加できます。
}
}
}
これでメニューのファイルから保存をすれば
修正はOKです。
9、再度テストプレイを行なって確認する
コードの修正ができたら、
再度テストプレイを行います。
シーンビューの上にあるプレイボタンを
クリックしてテストプレイを開始しましょう。
そしてゲームクリアをした時に、
ゲームの停止が確認できたら、
修正は完了です。
![ゲームをクリアしたらコンソールに「Game Clear!」というログが表示されてゲームがストップしました](https://katosanlaboratory.jp/wp-content/uploads/2024/08/breakoutgameclearmake45.jpg)
プレイボタンを押して、
テストプレイを終了しておきます。
これで今回の作業は完了となります。
10、まとめ
この記事では、
「ブロック崩しにおけるゲームクリアのプログラムの作り方」
についてお伝えをさせていただきました。
全部で9項目に分けて
解説をさせていただきましたが、
修正が入ったため2項目多くなりました。
最初の段階で、ゲームクリア時のプログラムに
ついてやりたいことを詳しく送信していれば、
修正の手間は省けたように思います。
例えば、
「ブロックを全て壊したらゲームクリアになって画面が止まるようにしたい。作り方を教えて」
というように、画面を止めるところまで
入れておくことでスムーズになるかもしれません。
今回のゲームクリアの処理は、
「クリアをした時にログが出てゲームがストップする」
という内容なので、物足りない感じもあります。
なので、ゲームオーバーの時と同じように
テキストを表示するように修正を
していこうと思いました。
ということで、次の記事では
「ゲームをクリアした時にテキストを表示させる方法」
について解説をしていきますね。
それでは、次の記事に進んでいきましょう。
次の記事はこちら → Unityでブロック崩しを作る基礎講座8:ゲームクリアのテキストを表示する