2019년 5월 13일 월요일

Unity Generics Singleton을 이용한 Manager 생성

Generics 타입의 Singleton 패턴을 이용해 DataManager 클래스를 생성한다.
그리고 생성한 DataManager 클래스의 변수 및 메서드는 어느 클래스에서도 접근할 수 있다.

Generics 타입으로 Singleton을 상속받아 재활용할 수 있다.
Awake() 메서드를 통해 Singleton에 맞게 GameObject가 중복으로 생성되지 않도록 처리되며,
Manager로 사용하기 위해, Scene 이동 시 삭제되지 않도록 처리되었다.

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

public class Singleton : MonoBehaviour where T : MonoBehaviour
{
    // Singleton Instance 선언
    static T m_instance;

    // Singleton Instance에 접근하기 위한 프로퍼티
    public static T Instance
    {
        get
        {
            if (m_instance == null)
            {
                // T 라는 오브젝트의 형(컴포넌트의 형)을 검색해 가장 처음 오브젝트를 반환 한다.
                m_instance = GameObject.FindObjectOfType();

                // instance 가 없을 경우 GameObject를 생성해 선언한다.
                if (m_instance == null)
                {
                    // T 컴포넌트 의 이름으로 생성 한다.
                    GameObject singleton = new GameObject(typeof(T).Name);
                    m_instance = singleton.AddComponent();
                }
            }

            return m_instance;
        }
    }

    public virtual void Awake()
    {
        if (m_instance == null)
        {
            m_instance = this as T;
            DontDestroyOnLoad(this.gameObject);
        }
        else
        {
            Destroy(gameObject);
        }
    }
}

// Singleton 의 파생으로 Manager 클래스 생성
public class DataManager : Singleton
{
    // Manager 클래스용 데이터 설정
    public bool isWrite = false;
    public int itemCount = 0;

    // DataManager에서 Awake 메서드 사용 시 선언
    public override void Awake()
    {
        base.Awake();
    }
}

public class DataUpdate
{
    void SetItem()
    {
        // DataManager 클래스에 접근이 가능 하다.
        DataManager.Instance.itemCount = 10;
    }
}

댓글 없음:

댓글 쓰기

Unity - Firebase 연동 (Analytics, AdMob)

버전 : firebase_unity_sdk_6.5.0.zip 게임에서 통계 측정 및 광고 추적을 위해 Firebase 을 연동한다. 앞서 [Unity - GPGS 와 Admob 연동 및 배포 준비 작업]  연동 이후에 작업을 진행 한다. 유니...