Example #1
0
    /// <summary>
    /// シーン遷移
    /// </summary>
    /// <param name="toSceneType">遷移先のシーンタイプ</param>
    /// <param name="isLoadAdditive">true:追加読み込み, false:他のシーンを解放して読み込み</param>
    /// <param name="onCompleteLoad">読み込み完了時</param>
    /// <param name="onCompleteTransition">遷移完了時(フェード終了時)</param>
    public void Transition(SceneName.Type toSceneType, bool isAdditive = false, Action onCompleteLoad = null, Action onCompleteTransition = null)
    {
        // フェードアウト後のシーン読み込み処理を設定
        Action loadSceneAction = () =>
        {
            // シーン読み込み処理
            SceneLoadManager.Instance.LoadSceneAsync(toSceneType, () =>
            {
                // シーン読み込み完了時処理を実行
                onCompleteLoad?.Invoke();

                // フェードイン開始
                CommonFade.StartFadeIn(onCompleteFade: onCompleteTransition);
            });
        };

        if (isAdditive)
        {
            SceneLoadManager.Instance.UnloadAllScene();
        }

        // フェードアウト開始
        CommonFade.StartFadeOut(onCompleteFade: () =>
        {
            // シーン読み込み処理を実行
            loadSceneAction();
        });
    }
Example #2
0
    /// <summary>
    /// シーンをリストに登録
    /// </summary>
    /// <param name="sceneType">シーンタイプ</param>
    /// <returns>true:追加成功, false:追加失敗</returns>
    public bool RegisterLoadedScene(SceneName.Type sceneType, ASceneController sceneController = null)
    {
        if (LoadedSceneList.ContainsKey(sceneType))
        {
            return(false);
        }

        if (sceneController == null)
        {
            var scene = SceneManager.GetSceneByName(SceneName.NameList[sceneType]);
            if (scene == null)
            {
                Debug.LogError($"[ERROR]Not loaded : {SceneName.NameList[sceneType]}Scene");
                return(false);
            }

            var rootObjects = scene.GetRootGameObjects();
            if (rootObjects == null)
            {
                Debug.LogError($"[ERROR]Have no root objects : {SceneName.NameList[sceneType]}Scene");
                return(false);
            }
            sceneController = rootObjects[0].GetComponent <ASceneController>();
            if (sceneController == null)
            {
                Debug.LogError($"[ERROR]Have no scene controller : {SceneName.NameList[sceneType]}Scene");
                return(false);
            }
        }

        LoadedSceneList.Add(sceneType, sceneController);
        return(true);
    }
Example #3
0
    /// <summary>
    /// シーン解放完了時
    /// </summary>
    /// <param name="sceneType">解放されたシーン</param>
    private void OnCompleteUnloadScene(SceneName.Type sceneType, Action onCompleteUnload)
    {
        // 解放したシーンをリストから削除
        LoadedSceneList.Remove(sceneType);

        // 完了時処理が設定されていれば実行
        onCompleteUnload?.Invoke();
    }
Example #4
0
    /// <summary>
    /// シーンがアクティブかチェック
    /// </summary>
    /// <param name="sceneType">対象のシーンタイプ</param>
    /// <returns>true:アクティブ, false:非アクティブ</returns>
    public bool IsActiveScene(SceneName.Type sceneType)
    {
        if (!LoadedSceneList.ContainsKey(sceneType))
        {
            return(false);
        }

        return(ActiveSceneList.Contains(sceneType));
    }
Example #5
0
    /// <summary>
    /// シーン読み込み完了時
    /// </summary>
    /// <param name="sceneType">読み込まれたシーン</param>
    private void OnCompleteLoadScene(SceneName.Type sceneType, Action onCompletedLoad)
    {
        // 読み込まれたシーンを登録
        RegisterLoadedScene(sceneType);

        // 読み込まれたシーンをアクティブ化
        ActivateScene(sceneType, true);

        // 完了時処理が設定されていれば実行
        onCompletedLoad?.Invoke();
    }
Example #6
0
    /// <summary>
    /// シーン読み込み
    /// </summary>
    /// <param name="sceneType">読み込むシーンタイプ</param>
    /// <param name="isAdditive">true:追加読み込み, false:単発で読み込み</param>
    /// <param name="onCompleteLoad">読み込み完了時処理</param>
    public void LoadScene(SceneName.Type sceneType, Action onCompleteLoad = null)
    {
        // 既にシーン読み込みされている場合は完了時処理を実行して終了
        if (LoadedSceneList.ContainsKey(sceneType))
        {
            OnCompleteLoadScene(sceneType, onCompleteLoad);
            return;
        }

        // シーン読み込みを実行
        SceneManager.LoadScene(SceneName.NameList[sceneType], LoadSceneMode.Additive);

        // 完了時処理を実行
        OnCompleteLoadScene(sceneType, onCompleteLoad);
    }
Example #7
0
    /// <summary>
    /// シーン読み込み
    /// </summary>
    /// <param name="sceneType">読み込むシーンタイプ</param>
    /// <param name="isAdditive">true:追加読み込み, false:単発で読み込み</param>
    /// <param name="onCompleteLoad">読み込み完了時処理</param>
    public void LoadSceneAsync(SceneName.Type sceneType, Action onCompleteLoad = null)
    {
        // 既にシーン読み込みされている場合は完了時処理を実行して終了
        if (LoadedSceneList.ContainsKey(sceneType))
        {
            OnCompleteLoadScene(sceneType, onCompleteLoad);
            return;
        }

        // 非同期でシーン読み込みを実行
        var operation = SceneManager.LoadSceneAsync(SceneName.NameList[sceneType], LoadSceneMode.Additive);

        operation.completed += _ =>
        {
            // 完了時処理を実行
            OnCompleteLoadScene(sceneType, onCompleteLoad);
        };
    }
Example #8
0
    /// <summary>
    /// シーン解放
    /// </summary>
    /// <param name="sceneType">解放するシーンタイプ</param>
    /// <param name="onCompleteUnload">解放完了時処理</param>
    public void UnloadScene(SceneName.Type sceneType, Action onCompleteUnload = null)
    {
        // 読み込まれていないシーンであれば処理を終了
        if (!LoadedSceneList.ContainsKey(sceneType))
        {
            OnCompleteUnloadScene(sceneType, onCompleteUnload);
            return;
        }

        // シーン終了処理
        LoadedSceneList[sceneType].SceneFinalize();
        LoadedSceneList[sceneType].gameObject.SetActive(false);

        // 非同期でシーン解放
        var operation = SceneManager.UnloadSceneAsync(SceneName.NameList[sceneType]);

        operation.completed += _ =>
        {
            OnCompleteUnloadScene(sceneType, onCompleteUnload);
        };
    }
Example #9
0
    /// <summary>
    /// シーンのアクティブ切り替え
    /// </summary>
    /// <param name="sceneType">対象のシーン</param>
    /// <param name="isActive">true:アクティブ, false:非アクティブ</param>
    public void ActivateScene(SceneName.Type sceneType, bool isActive)
    {
        // 読み込まれていないシーンであれば処理を終了
        if (!LoadedSceneList.ContainsKey(sceneType))
        {
            return;
        }

        // 非アクティブ化時は直前に終了処理
        if (!isActive && LoadedSceneList[sceneType].gameObject.activeSelf)
        {
            LoadedSceneList[sceneType].SceneFinalize();
        }

        LoadedSceneList[sceneType].gameObject.SetActive(isActive);

        // アクティブ化時は直後に初期化処理
        if (isActive && !LoadedSceneList[sceneType].gameObject.activeSelf)
        {
            LoadedSceneList[sceneType].SceneInitialize();
        }
    }
Example #10
0
 /// <summary>
 /// シーンが読み込み済みかチェック
 /// </summary>
 /// <param name="sceneType">対象のシーンタイプ</param>
 /// <returns>true:読み込み済み, false:未読み込み</returns>
 public bool IsLoadedScene(SceneName.Type sceneType)
 {
     return(LoadedSceneList.ContainsKey(sceneType));
 }