[Unity 강의] 뱀서라이크 강의 - 매니저

업데이트:

카테고리:

태그: , ,




1. Manager

✔ 설계적인 부분을 생각하며 만들자.
✔ 오브젝트 간 연결 - 코드에서 관리
✔ 최상위 매니저(싱글톤) - MonoBehaviour - 다른 매니저를 들고 있는
✔ 하위 매니저 - 일반 클래스로

Image



using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Managers : MonoBehaviour
{
    static Managers s_instance;
    static bool s_init = false;

    #region Contents
    GameManager _game = new GameManager();
    ObjectManager _object = new ObjectManager();
    PoolManager _pool = new PoolManager();

    public static GameManager Game { get { return instance?._game; } }
    public static ObjectManager Object { get { return instance?._object; } }
    public static PoolManager Pool { get { return instance?._pool; } }
    #endregion

    #region Core
    DataManager _data = new DataManager();
    ResourceManager _resource = new ResourceManager();
    SceneManagerEx _scene = new SceneManagerEx();
    SoundManager _sound = new SoundManager();
    UIManager _ui = new UIManager();

    public static DataManager Data { get { return instance?._data; } }
    public static ResourceManager Resource { get { return instance?._resource; } }
    public static SceneManagerEx Scene { get { return instance?._scene; } }
    public static SoundManager Sound { get { return instance?._sound; } }
    public static UIManager UI { get { return instance?._ui; } }
    #endregion

    public static Managers instance 
    {
        get 
        {
            if (s_init ==false)
            {
                s_init = true;

                GameObject go = GameObject.Find("@Managers");
                if (go == null) 
                {
                    go = new GameObject() { name = "@Managers" };
                    go.AddComponent<Managers>();
                }
                DontDestroyOnLoad(go);
                s_instance = go.GetComponent<Managers>();
                // TODO 초기화 코드
                // ex) _instance._game.Inint();

            }
            return s_instance;
        }
    }

}

public class GameManager 
{
    Vector2 _moveDir;

    public event Action<Vector2> OnMoveDirChanged;

    public Vector2 MoveDir
    {
        get { return _moveDir; }
        set 
        {   
            _moveDir = value;
            OnMoveDirChanged?.Invoke(_moveDir);
        }
    }
}

public class ObjectManager 
{

}

public class PoolManager 
{

}




2. 델리게이트 사용

3강 조이스틱 연결 - 3.델리게이트 콜백





이것저것 메모

설계

✔ 설계적인 부분을 생각하며 만들자.
✔ 오브젝트 간 연결 - 코드에서 관리





잡담, 일기?

델리게이트 액션 더 공부하기




📔

댓글남기기