Menu
CoddyTech

レベルを再スタートする

CoddyのUnityジャーニー「本格的なゲームを作る」セクションの一部。レッスン 18/56。

レベルをリセットする最も手早い方法は、もう一度読み込むことです。SceneManager.GetActiveScene()は現在開いているシーンを返し、そのname(またはbuildIndex)をLoadSceneに渡します。ゲームオーバー画面のこのリスタートボタンは、次の処理を呼び出します。

public void Restart()
{
    SceneManager.LoadScene(SceneManager.GetActiveScene().name);
}

Unityは開いているシーンを破棄し、シーンファイルから再構築します。シーンに配置されたすべてのオブジェクトは元の位置に戻ります。プレイヤーが倒した木箱も含まれ、すべてのフィールドには再びInspectorの値が設定され、AwakeとStartも再度実行されます。オブジェクトを一つずつ元に戻すコードは必要ありません。ボタンは"Level3"のような名前ではなくアクティブなシーンを指定するため、同じスクリプトを配置したどのレベルでも再起動できます。

staticフィールドはシーンの一部ではなく、クラスに属するため、再読み込みしてもそのまま残ります。private static float bestTime;は再起動してもベストタイムを保持しますが、通常のprivate float time;は新しいシーンで0から再開します。GameManager.Instanceもstaticです。再読み込み後は、新しいGameManagerのAwakeが設定するまで、破棄されたGameManagerを指しています。

challenge icon

チャレンジ

簡単

2つのレベル、Level1とLevel2があり、それぞれにLevelRestartスクリプトを持つLevelオブジェクトがあります。矢印キーでPlayerを歩かせ、Level1の金色のブロックでLevel2を読み込みます(どちらも準備済みです)。LevelRestart.csを完成させましょう:

  • プレイヤーがfallY(-3)より下に落ちたら、fallsに1を加え、プレイヤーがいるレベルを再起動します。Level2で落ちた場合は、Level2が再起動します。
  • fallsはゲーム中のすべての落下を数えるため、再読み込み後も値が保持されなければなりません。StartではすでにFalls: 1のように表示されています。

Playを押し、両方のレベルで端から落ちてから、Checkを押してください。

自分で試してみよう

using UnityEngine;
using TMPro;

public class LevelRestart : MonoBehaviour
{
    public Transform player;
    public TMP_Text fallsText;
    public float fallY = -3f;
    private int falls;

    void Start()
    {
        fallsText.text = "Falls: " + falls;
    }

    void Update()
    {
        // fallY より下に落ちたら、落下回数を増やし、プレイヤーがいるレベルを再開する
    }
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

本格的なゲームを作るのすべてのレッスン