AppSeedのアプリ開発ブログ

アプリ開発会社AppSeed(アップシード)開発担当のブログです。iOS、Android、Unity、Cocos2d-xなどアプリ開発関連のTipsや備忘録、アプリ開発に役立つ情報を発信します。

【Unity】プレイヤーでどのシーンから再生しても最初のシーンから起動するようにする設定

https://unity3d.com/files/images/ogimg.jpg?1


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:アプリ起動時の画面