ゴールとステージクリア処理の作り方(ゴールに着いたらクリア画面を出す)

前回の作業でユニティちゃんが動くようになりました。そこで早速ステージを作りたいところですが、それは楽しみにとっておいて先にステージクリア処理ゲームオーバー処理といった面倒な部分を作ってしまったほうが効率的です。

そういうわけでこのページでは

  • ゴールのゲームオブジェクトの作り方
  • ステージクリア処理の作り方

の2つを説明していきます(※ゲームオーバー処理については次のページで説明しますね)。

スポンサーリンク

ゴールのゲームオブジェクトの作り方

では、はじめにゴールのゲームオブジェクトを用意します。お手本は下の画像のような感じです。

ゴールのゲームオブジェクトのお手本

ゴールの台座を作る

まずはゴールの台座を作ります。ヒエラルキーで右クリック→「3Dオブジェクト」→「シリンダー」を選択してシーンに円柱を作り、次の作業を行ってください。

  1. スケールを(3, 0.1, 3)にする
  2. Mesh Colliderを削除し、かわりにBox Colliderをアタッチする
  3. Box Colliderの「トリガーにする」にチェックを入れる
  4. 金色のマテリアルを作り、Mesh Rendererのマテリアル欄に設定する

「GOAL」の文字を作る

次に「GOAL」の文字を作ります。

ゴールの文字のテクスチャ

ヒエラルキーで右クリック→「3Dオブジェクト」→「クアッド」を選んで板オブジェクトを作ったら、↑のテクスチャをダウンロードして次の作業を行いましょう。

  1. クアッドのMesh Colliderは不要なので削除する
  2. クアッドをゴールの台座のゲームオブジェクトの子にする
  3. Y方向のスケールを「15」にする
  4. Y座標を適当に調整する
  5. 新しいマテリアルを作り、下の画像のように設定する
    GOALの文字のマテリアルの設定

ステージクリア処理の作り方

次に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」と書かれた画面が出れば成功です。

ステージクリア処理の例

(クリックで再生)

※現時点ではステージクリア画面のボタンを押しても正常に動作しませんが、これについては後で対処します。


次のページ→ゲームオーバー処理の作り方