シーン遷移で破棄されない&1つしか存在しないオブジェクトの作成方法

複数のシーンで必要なオブジェクトは、各シーンに存在しているよりも最初のシーンのものを使い続けた方が良かったりします。
例えば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オブジェクトやデータ管理オブジェクトなんかにオススメ。

Commentsこの記事についたコメント

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です