複数のシーンで必要なオブジェクトは、各シーンに存在しているよりも最初のシーンのものを使い続けた方が良かったりします。
例えばBGMを再生するオブジェクトなんかは、各シーンでそれぞれ使っているとシーン遷移時にいちいちBGMが途切れてしまうので、同一のものをシーンを越えて使い続ける方が便利です。
そんなときに使うのが、DontDestroyOnLoad関数。
これを記述したスクリプトをアタッチしておけば、シーン遷移時に削除されず、複数シーンをまたいで使用できます。
しかし、これにはある問題が。
最初のシーンでDontDestroyOnLoadのオブジェクトを作成し、他のシーンに遷移した時には問題ないのですが、また最初のシーンに戻ってしまうと2つ目のオブジェクトが生成されてしまいます。
最初のシーンに遷移するたびにDontDestroyOnLoadのオブジェクトが増え続けてしまうのです。
さらに、DontDestroyOnLoadのオブジェクトは最初のシーンに配置しているので、エディタで作成しているときは編集中のシーンにDontDestroyOnLoadのオブジェクトがありません。
BGMぐらいならあまり問題ないですが、Playerオブジェクトだったりカメラだったりすると、作成しづらいです。
しかし全てのシーンにDontDestroyOnLoadのオブジェクトを配置してしまうと、先ほど言ったようにシーン遷移するたびにどんどん複製されてしまう。。。
シーン遷移で破棄されない&1つしか存在しないオブジェクトの作成方法
そこで、タイトルにもあるようにシーン遷移で破棄されない&1つしか存在しないオブジェクトの作成方法です。
以下のスクリプトをアタッチしましょう。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class DontDestroySingleObject : MonoBehaviour {
public static DontDestroySingleObject Instance {
get; private set;
}
void Awake(){
if (Instance != null) {
Destroy (gameObject);
return;
}
Instance = this;
DontDestroyOnLoad (gameObject);
}
}
このスクリプトをアタッチすれば、シーン遷移で破棄されない&1つしか存在しないオブジェクトが実現できます。
BGMオブジェクトやデータ管理オブジェクトなんかにオススメ。
コメント