그리고 생성한 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;
}
}
댓글 없음:
댓글 쓰기