Help us understand the problem. What is going on with this article?

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

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away