Scene切替時でもGameObject等を破棄せずに保持しておく方法

  • 150
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

Unityではシーンを切り替えるとGameObject等は全部破棄される。

でもゲームのスコアや、主人公キャラ等とっておきたいケースは多々ある。
そんな時に使える方法などなどのメモ書き。

static

static付の変数は、アプリ終了時まで破棄されません。
(使い所は吟味する必要があるかと思いますが・・・ここでは割愛)

Hero.cs
public static int score;

void EnemyKill() {
    Hero.score += 100;
}

GameObjectの場合は

Object.DontDestroyOnLoadを使用。
引数に指定したGameObjectは破棄されなくなり、Scene切替時にそのまま引き継がれます。

public GameObject hero;

void Awake() {
    // 特定のGameObjectだったり
    DontDestroyOnLoad(hero);

    // 自分自身だったり
    DontDestroyOnLoad(this);
}

Sceneの合体

Application.LoadLevelAdditiveでScene切り替えを行うと、
現在のSceneに切り替え後のSceneが合体されます。
一時的なSceneの呼び出し・・・例えば、ゲーム中のポーズ画面とかでしょうか。

Application.LoadLevelAdditive("PauseScene");

以上を踏まえ応用編として、前Sceneを破棄せずに丸ごと保持しておく方法

  1. EmptyなGameObjectを作る。
  2. シーン内のGameObjectは、全て1で作成したGameObjectの子にする。
  3. 1で作成したGameObjectをDontDestroyOnLoadで破棄しないようにするか、
    次SceneをApplication.LoadLevelAdditiveで合体する事により、
    Scene内のGameObject全て、次のSceneに引き継ぎできる。

例えば1で作成したGameObjectを
非表示&一時停止SetActive(false)し、次Sceneを読み込み。
必要な箇所で有効SetActive(true)にする等々…色々応用が考えられるかと。