using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class SceneManagerEx
{
public BaseScene CurrentScene { get { return GameObject.FindObjectOfType<BaseScene>(); } }
public void LoadScene(Define.Scene type)
{
CurrentScene.Clear();
SceneManager.LoadScene(GetSceneName(type));
}
string GetSceneName(Define.Scene type)
{
string name = System.Enum.GetName(typeof(Define.Scene), type);
return name;
}
}
유니티에서 기본적으로 SceneManager를 제공하지만, 기능을 확장시키기 위해 따로 구현했다.
Define 클래스에 Scene이라는 enum을 추가해 Scene들을 관리한다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
public abstract class BaseScene : MonoBehaviour
{
public Define.Scene SceneType { get; protected set; } = Define.Scene.Unknown;
void Start()
{
}
protected virtual void init()
{
Object obj = GameObject.FindObjectOfType(typeof(EventSystem));
if (obj == null)
Managers.Resource.Instantiate("UI/EventSystem").name = "@EventSystem";
}
public abstract void Clear();
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class LoginScene : BaseScene
{
protected override void init()
{
base.init();
SceneType = Define.Scene.Login;
}
private void Update()
{
if (Input.GetKeyDown(KeyCode.Q))
{
Managers.Scene.LoadScene(Define.Scene.Game);
}
}
public override void Clear()
{
Debug.Log("LoginScene Clear");
}
}
BaseScene은 추상 클래스이며 init()함수를 통해 EventSystem을 Scene에 구현한다.
LoginScene은 부모 클래스에서 프로퍼티로 구현한 SceneType을 통해 자신의 타입을 Login으로 설정하고 키보드 Q를 누르면 Game 신으로 변경되도록 한다. 또한 신의 전환 시 로그를 남기도록 하였다.