第2回UnityでPinBallGame作成~上級編~

こんにちはパソコン教室えがおの加賀美です!!
9回目のブログ更新になります(*^^)v 
前回「Unity」を使って簡単なピンボールゲームを作成し、オブジェクト(ボール、ブロック、プレイヤー)を作ってC#Scriptを作成し動かすまでを作成しました。
今回は上級編ということで、GameManagerやUIなどを勉強していきたいと思います。

  • 今回学ぶ事
  • GameManagerの作成
  • ゲームクリアーの作成
  • ゲームオーバーの作成
  • UI(ユーザーインタフェイス)の作成
  • GameManagerの作成

プロジェクトビューを右クリック ➡ Create ➡ C#Script

名前は「GameManager」とする   ※アイコンが変わっても気にしない

「GameManager」をダブルクリックしてVisualStudioを立ち上げる

「GameManager」とはゲーム全体の管理者

・例えばブロックが消えたらすべてクリアとする

・ボールが1番下の壁に当たったらゲームオーバーにするなど

  • 次にゲームクリアーの作成

ルールとしてブロックがすべて消えたらクリアーにする

まずブロックを格納する変数を作る。スクリプトを書いたら保存する

Unityに戻りからのオブジェクトを作成する(CreateEmpty)

CreateEmptyを作ったら名前の変更「GameManager」したらスクリプトをアタッチする。

インスペクターウィンドーのBlocks Sizeとある場所にすべてのブロック、Block~Block(9)までのオブジェクトをドラッグして入れ込む。

これでこの「GameManager」のスクリプトの中でBlockがすべてなくなったか判断できる。

スクリプトの [] は配列という意味

※配列とは複数の変数の集合体(セット)同じ方であれば入ることができる。

ブロックが全て消えた時にすべてゲームを終わらせたいゲーム中のブロックがあるか監視するのでVoid Update()の中に書く

次に関数を入れます

このゲームでしか使わないのでprivateで、帰り値は今回は「出来ている」と「出来てない」の2択なのでboolを使う。

※boolは「出来ている」と「出来てない」の2択 (trueかfalse)

関数名は「DestroyAllBlocks」とする

ブロックが全て消えていたら「消えている  return.true;」「消えてない  return.false;」

配列を入れてら必ず使うのがforeach(配列の中の各要素に対して命令ができる)

かっこの中のblocks分だけがループする

!=の意味・・・~ではない  逆に==の意味は・・・同じである

Nullの意味は・・・何もない

スクリプトの b!=nullとは・・・もしbがnullではない場合

ブロックが1個でもあれば実行されません。

関数が出来たらup dateの中にゲームクリアーの処理とゲームチェックするプログラムを書く

Debug LogとはUnityのコンソールにエラーなどを表示させる

出来たらゲームを実行させて確認をする。

  • 次にゲームオーバーの作成

ルールとしてボールが1番下の壁に当たったらゲームオーバーにする

Ballスクリプトを開いて、何かの当たった時にプログラムを実行させる

他のスクリプトから呼ぶ関数を作るのでpublicとする。

このまま実行してしまうと何に当たってもボールが消える状態でゲームにならないので、1番下の壁だけに当たったらゲームオーバーとするように書く。

Unityに戻って1番下の壁をクリックし、Tag付けをする。

TagはFinishとする。ついでにオブジェクト名を「WallFinish」

このボールが当たったもののTagがFinishだったらゲームオーバーのプログラムが動くようにする。

Ballのスクリプトに追加する

Destroy(this.gameObject);の位置を変える

保存してUnityで実行する。

ボールが1番下の壁に当たっていることを伝えるスクリプトを追加する

ボールスクリプトに新しい変数を追加する

Unityに戻ってBallをクリックする

インスペクターウィンドーにMy ManagerがでてくるのでHieraichyのGameManagerをドラッグする(アタッチ)

そうすることによってGameManagerにBallがゲームオーバーになった時、ゲームオーバーだよと伝える役割になる。

  • UI(ユーザーインターフェイス)を作成

GameObject ➡ UI ➡ Text

Positionは

Textの変更「GAME OVER」に

スケールを変更し中央揃え、色は白にフォントサイズは40に変更

ここでテキストが消えてしまった人は下記調整してください

Horizontal OverflowをOver Flowに変更

Vertical OverflowをOver Flowに変更

位置調整する

1つのCanvasが1個のUI(CanvasにUIを作っていく)

ボタンのオブジェクトを入れる

GameObject ➡ UI ➡ Button

Positionn変更

テキストを変更する「RETRAY」

ボタンのパラメーター変更

押された時のボタンを変更する

Pressed colorを好きな色に

On Click➡クリック時 変更

+を追加

HerarchyのGameManagerをドラッグする

そうすることによってGameManagerの関数を選ぶことが可能に

GameManagerのスクリプトと関数を追加する

他からも使うのでPublick

GameRetryの処理を書く

Gameシーンの再読み込みをさせる

Using UnityEngine SceneManagementをクリックするとエラーが消える

残りのスクリプトを書く

Buttonをクリック ➡ インスペクターウィンドーのOnClickのNoFanctionにGameManagerを入れ込む。

実行させて確認

UIを非表示にして名前を変える「UIGameOver」

次に1番下の壁に当たったら上のUI(GameOver)が実行されるスクリプトを書きます。

まず変数の作成

スクリプトを追加

SetActiveとは表示されているかされていないかを表す関数。

保存して実行して確認する。

GameManagerに戻るとGameOverUIが追加される。

そこに先ほど非表示にしたUIGameOverのUIをドラッグする。

実行して確認する。

  • ゲームクリアーUIを作成

ほぼゲームオーバーUIと同じなのでUIGameOverを複製して名前の変更

「UIGameClear」に

Buttonはそのままにして非表示にする。

GameManagerスクリプトの変更

ここでもコピーする。

gameOverUI.SetActive(true);をコピーする。

貼り付けて(gameClearUI)に変更

ただこのままだとvoid Updateの中のスクリプトが永遠に繰り返されてしまう(無駄にPCに負荷が過かってしまう)ので少しスクリプトを追加します。

次に下記の青い部分を切り取って

下記に張るつける

If ( is GameClear != true)

↑まだゲームがクリアーしてない場合

Is GameClear = true;

↑の処理を一回でもしたら  if  の部分が呼ばれなくなるスクリプト。

これで無駄な処理がされなくなる。

Unityに戻りGameMnagerにGameClearUIが追加されているか確認する。

そこにUIGameClearをドラッグする。

最後保存して実行確認する。

以上で第2回UnityでPinBallGame作成の終わりです。
ここまで出来るようになれ簡単なゲームであれば作れると思います。
後は、自分用に作り替えたりデザインを変えたり工夫して自分なりのゲームを作って楽しんでください。

Leave a Reply

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)