前回の作業でユニティちゃんが動くようになりました。そこで早速ステージを作りたいところですが、それは楽しみにとっておいて先にステージクリア処理やゲームオーバー処理といった面倒な部分を作ってしまったほうが効率的です。
そういうわけでこのページでは
- ゴールのゲームオブジェクトの作り方
- ステージクリア処理の作り方
の2つを説明していきます(※ゲームオーバー処理については次のページで説明しますね)。
ゴールのゲームオブジェクトの作り方
では、はじめにゴールのゲームオブジェクトを用意します。お手本は下の画像のような感じです。
ゴールの台座を作る
まずはゴールの台座を作ります。ヒエラルキーで右クリック→「3Dオブジェクト」→「シリンダー」を選択してシーンに円柱を作り、次の作業を行ってください。
- スケールを(3, 0.1, 3)にする
- Mesh Colliderを削除し、かわりにBox Colliderをアタッチする
- Box Colliderの「トリガーにする」にチェックを入れる
- 金色のマテリアルを作り、Mesh Rendererのマテリアル欄に設定する
「GOAL」の文字を作る
次に「GOAL」の文字を作ります。
ヒエラルキーで右クリック→「3Dオブジェクト」→「クアッド」を選んで板オブジェクトを作ったら、↑のテクスチャをダウンロードして次の作業を行いましょう。
- クアッドのMesh Colliderは不要なので削除する
- クアッドをゴールの台座のゲームオブジェクトの子にする
- Y方向のスケールを「15」にする
- Y座標を適当に調整する
- 新しいマテリアルを作り、下の画像のように設定する
ステージクリア処理の作り方
次にC#スクリプトを書いてステージクリア処理を作っていきます。
GameManagerのスクリプトを変更する
まず、最初にインポートしてもらった「くろくま基本アセット2」に含まれている「GameManager」のスクリプトを少し変更します。
GameManagerとはゲーム進行を管理するためのゲームオブジェクトなのですが、ゲームによってどのような形でゲームが進行するかは様々なので「くろくま基本アセット2」では具体的な処理は書いてありません。そこでGameManagerのスクリプトにステージクリア処理を書き加えましょう。
KurokumaBasicAsset2/Scripts/Systemフォルダ内にGameManagerのC#スクリプトがあるのでそれを開き、次のように処理を追加してください(※関係ない部分は省略してあります)。
public class GameManager : SingletonMonoBehaviour<GameManager> { [Header("シーンロード時に自動生成するプレハブを登録")] [SerializeField] GameObject[] prefabs = null; //★追加1 [Header("UIの設定")] [SerializeField] GameObject stageClearCanvasPrefab = null; [SerializeField] GameObject gameOverCanvasPrefab = null; //省略 public void StageClear() { if(isClear || isGameOver) { return; } isClear = true; //★ここにステージクリア時の処理 //★追加1 //プレイヤーを止める KurokumaCharacterController player = GameObject.FindGameObjectWithTag("Player").GetComponent<KurokumaCharacterController>(); player.IsActive = false; player.StopCharacter(); //ステージクリア画面を出す Instantiate(stageClearCanvasPrefab); } //以下略
そうしたらヒエラルキーにGameManagerのプレハブ(※KurokumaBasicAssets2/Prefabs/Systemフォルダ内にあります)をドラッグ&ドロップして、「UIの設定」の2つの欄にそれぞれ次のようにプレハブを登録しましょう。
- Stage Clear Canvas Prefab:StageClearCanvas(※KurokumaBasicAssets2/Prefabs/UI/Canvasフォルダ内にあります)
- Game Over Canvas Prefab:GameOverCanvas(※場所は同上、こちらはゲームオーバー用ですがついでに)
設定したら忘れずにGameManagerのプレハブをオーバーライドして変更を適用してください。
ゴール用のC#スクリプトを書く
そうしたら次はゴール用のC#スクリプトを書いて、ゴールに到着したらステージクリア画面が出るようにしていきます。適当なフォルダに新しく「Goal」という名前のC#スクリプトを作成して次のコードを書きましょう。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Goal : MonoBehaviour { GameManager gameManager; void Start() { gameManager = GameObject.FindGameObjectWithTag("GameController").GetComponent<GameManager>(); } private void OnTriggerEnter(Collider other) { if (other.gameObject.CompareTag("Player")) { gameManager.StageClear(); } } }
書けたらこれをGoalオブジェクトにアタッチします。これでゴールが完成したので、あとで使いまわせるようにGoalオブジェクトをプレハブ化しておいてください。
テストプレイしてステージクリア処理の動作を確認する
これでひとまずゴールとステージクリア処理ができました。テストプレイして、下のGIFのようにユニティちゃんがゴールに触れたら「Stage Clear」と書かれた画面が出れば成功です。
※現時点ではステージクリア画面のボタンを押しても正常に動作しませんが、これについては後で対処します。
次のページ→ゲームオーバー処理の作り方