Unityアプリ開発での効率化に関するメモ。
Unityで複数のシーンを使ったアプリを作る場合、
他の画面でも使うようなGameObjectを「DontDestroyOnLoad」で永続化させることが結構あります。
他のシーンでも使うオブジェクトは、だいたいアプリを起動するシーンで初期化・永続化させて使い回しますが、
今まではアプリを起動のScene以外のSceneを開発中に動きを確認したい時、
使い回すゲームオブジェクトを利用できるようにするために、アプリ起動のSceneに切り替えて再生してました。
これでも全く問題ないのですが、いちいちSceneを切り替えるのが最近面倒臭くなってきたので、
「プレイヤーでどのSceneから再生してもアプリ起動のSceneから再生するようにする設定」をしてみました。
スクリプトは以下です。
using UnityEngine; using UnityEngine.UI; using UnityEngine.SceneManagement; public class MainSceneManager : MonoBehaviour { private GameObject HeaderManager; // Start is called before the first frame update void Start() { CommonUILoad(); } public void CommonUILoad() { GameObject manager = GameObject.FindGameObjectWithTag("GameManager");//永続化処理したゲームオブジェクト if (manager != null) { HeaderManager = manager.GetComponent<GameManager>().HeaderManager;//永続化したオブジェクトからヘッダーオブジェクトを取得 } if (HeaderManager == null ) { SceneManager.LoadScene("SplashScene"); return; } HeaderManager.SetActive(false); } }
上記の場合、Sceneを再生した時に使い回すゲームオブジェクトを探してみて、
もし永続化したゲームオブジェクトがない場合はアプリ起動のSceneを読み込み、ある場合はそのSceneを続行するようにしてます。
これなら普通にアプリ起動Sceneから遷移してきた場合は、通常の動きになるし、このSceneから再生した場合はアプリ起動のSceneに遷移するので、永続化オブジェクトがないことによるエラーは発生しなくなります。
- MainSceneManager:Sceneを管理するクラス
- SplashScene:アプリ起動時の画面