Unity 6.3 LTS|3D的当てゲームを作ろう⑨ 全部倒したら次のステージへ進もう

Stage1のクリア後に見た目の異なるStage2へ移動したUnityのゲーム画面 Unity

第9回では、ステージ内のTargetをすべて倒したら次のSceneへ移動する仕組みを作ります。教材ではStage1からStage2へ進むところまで作り、最後に自分でStage3へ発展させる課題へ挑戦します。

今回の到達点

最後のTargetを倒すとCLEARを表示し、少し待ってからStage2を読み込みます。完成後は、同じ仕組みを使ってStage3を自分で作ります。

STEP 1

Stage2を作ろう

ProjectのScenesフォルダーでStage1を複製し、名前をStage2にします。複製はCtrl + Dで行えます。

ScenesフォルダーにStage1とStage2を作成したProjectウィンドウ
元のSceneを複製すると、Player、Canvas、敵、スクリプトの設定を引き継げます。

Stage2を開き、敵の位置、壁、床のMaterialなどを変更します。

Stage2を開いたUnityのHierarchy
Hierarchyの一番上がStage2になっていることを確認してから編集します。
Sceneを間違えないために

複製しただけではStage1とStage2の内容は同じです。Hierarchy上部のScene名を確認してから、Stage2だけを変更します。

STEP 2

Scene Listへ登録しよう

File → Build Profilesを開き、Scene ListへStage1とStage2を登録します。

Build ProfilesのScene ListへStage1とStage2を登録した画面
Stage1を番号0、Stage2を番号1として有効にします。Scene名の左にチェックが必要です。

開いているSceneを登録する場合はAdd Open Scenesを使えます。Stage1とStage2の両方が一覧に入っていることを確認します。

STEP 3

SceneManagerを読み込もう

ShootCheck.csの先頭へ次の1行を追加します。

using UnityEngine.SceneManagement;

Sceneを切り替えるSceneManagerをスクリプトから利用できるようになります。

クラス内の変数部分へ、次の2つを追加します。

public string nextSceneName = "Stage2";
public float nextStageDelay = 2f;
nextSceneName次に読み込むSceneの名前をInspectorから設定します。
nextStageDelayCLEARを表示してからSceneを切り替えるまでの秒数です。
SceneManagerSceneを読み込むUnityの機能です。
STEP 4

全Targetを倒したら次のStageへ進もう

ShootCheck.csには、Scene開始時のTarget数をremainingTargetsへ保存する処理があります。Targetを倒すたびに1減らし、0になったらSceneを切り替えます。

remainingTargets == 0の処理を次の形にします。

if (remainingTargets == 0)
{
    gameEnded = true;
    scoreText.text =
        "CLEAR!\nSCORE: " + score;

    Invoke(
        nameof(LoadNextStage),
        nextStageDelay);
}

クラスの最後の}より前へ、次の関数を追加します。

void LoadNextStage()
{
    SceneManager.LoadScene(nextSceneName);
}
コードを置く順番

LoadNextStage()はUpdate()の外側で、ShootCheckクラスの内側へ置きます。

STEP 5

Stage1からStage2への切り替えを確認しよう

Stage1のMain Cameraを選び、ShootCheckの設定を次のようにします。

Next Scene Name:Stage2
Next Stage Delay:2

Stage1を再生してTargetをすべて倒します。CLEARが表示され、2秒後にStage2が始まれば成功です。

Stage1のクリア後に異なる床と壁のStage2へ移動したGameビュー
動画ではStage1をクリアした後、床と壁の見た目を変えたStage2へ切り替わりました。
すべてのTargetを倒すとStage1からStage2へ切り替わるUnityゲームの動作例
最後のTargetを倒し、CLEAR表示後にStage2へ移動する流れです。
CHALLENGE

自分でStage3を作ってみよう

ここまでの手順を使い、自分の力でStage3を作ってStage2から移動できるようにしてみましょう。Stage1からStage2を作った流れを思い出せば完成できます。

MISSION|Stage3へ進めるようにする
  1. Stage2を複製して、Scene名をStage3にする。
  2. 床のMaterial、壁、敵の位置などを変更し、Stage2と違うステージにする。
  3. Stage3をBuild ProfilesのScene Listへ追加する。
  4. Stage2をクリアしたらStage3が読み込まれるように設定する。
  5. PlayしてStage1 → Stage2 → Stage3と進めるか確認する。

新しいC#スクリプトは作りません。Stage1とStage2で使った同じShootCheck.csを利用します。どのSceneのNext Scene Nameを変更すればよいか考えてみてください。

ヒント1|Scene Listの並び方
0  Stage1
1  Stage2
2  Stage3

Stage3の左側にもチェックを入れます。Scene名は大文字と小文字も含めて正確に付けてください。

ヒント2|どこにStage3と設定する?

Playを停止してStage2を開き、Stage2内のMain Cameraを選択します。Shoot CheckのNext Scene Nameを確認してください。

できたら答え合わせ

Stage2内のMain Cameraで、次のように設定します。

Next Scene Name:Stage3
Next Stage Delay:2
Stage2のShoot CheckでNext Scene NameをStage3に設定したInspector
設定後はCtrl + SでStage2を保存します。
Stage3と入力してもStage2のままになる場合

コードに書いた初期値より、Inspectorへ保存されている値が優先されます。Playを停止してStage2を開き、Stage2内のMain Cameraで値を変更してからCtrl + Sで保存します。

Play中に変更した値は、停止すると元へ戻ります。

発展|最後のStageでALL CLEARを表示する

最後のStageではNext Scene Nameを空欄にし、空欄ならSceneを切り替えないようにします。

void LoadNextStage()
{
    if (string.IsNullOrWhiteSpace(nextSceneName))
    {
        scoreText.text =
            "ALL CLEAR!\nSCORE: " + score;
        return;
    }

    SceneManager.LoadScene(nextSceneName);
}
次回へ

スコアとHPを次のStageへ引き継ごう

Sceneを切り替えると、現在のスコアやHPは初期値へ戻ります。次回はステージをまたいでゲームの状態を保存する方法へ進めます。

コメント

タイトルとURLをコピーしました