前回の作業でユニティちゃんが動くようになりました。そこで早速ステージを作りたいところですが、それは楽しみにとっておいて先にステージクリア処理やゲームオーバー処理といった面倒な部分を作ってしまったほうが効率的です。
そういうわけでこのページでは
- ゴールのゲームオブジェクトの作り方
- ステージクリア処理の作り方
の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」と書かれた画面が出れば成功です。
※現時点ではステージクリア画面のボタンを押しても正常に動作しませんが、これについては後で対処します。
次のページ→ゲームオーバー処理の作り方



