[Unity] SceneManager

Jihoon·2022년 3월 28일
0

MMO_Unity

목록 보기
10/22

SceneManager

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들을 관리한다.

BaseScene, LoginScene

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 신으로 변경되도록 한다. 또한 신의 전환 시 로그를 남기도록 하였다.

profile
클라이언트 개발자 지망생

0개의 댓글