Edited at

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

More than 5 years have passed since last update.

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)にする等々…色々応用が考えられるかと。