일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- Custom Package
- RSA
- 암호화
- 단말기 해상도
- jumping ball
- unity
- Dynamic Font
- ui
- 최적화
- job
- 다이나믹 폰트
- 커스텀 패키지
- 텍스트 메시 프로
- adfit
- Dots
- Unity Editor
- 이미지 폰트
- 프레임워크
- Framework
- base64
- 가이드
- DotsTween
- Tween
- 샘플
- AES
- TextMeshPro
- 2D Camera
- C#
- sha
- Job 시스템
Archives
- Today
- Total
EveryDay.DevUp
[Unity] Singletone 본문
Unity Singletone은 Unity Scene Load와 Destory에 상관없이 별도의 삭제 코드가 없다면 앱의 종료시 까지 남아있는 GameObject로, 전역적인 접근과 하나의 인스턴스만 생성되는 개념
Unity Singletone을 직접 구현할 수도 있지만, 템플릿으로 구현된 다음의 코드를 복사해서 사용할 수 도 있음
http://wiki.unity3d.com/index.php/Singleton
▶ Scene에 이미 싱글톤 객체가 있을 경우 초기 설정이 되지 않는 문제가 있어 해당 부분 수정
using UnityEngine;
public class Singleton<T> : MonoBehaviour where T : MonoBehaviour
{
private static bool m_ShuttingDown = false;
private static object m_Lock = new object();
private static T m_Instance;
public static T Instance
{
get
{
if( m_ShuttingDown )
{
return null;
}
lock( m_Lock )
{
if( m_Instance == null )
{
m_Instance = (T)FindObjectOfType( typeof( T ) );
GameObject singletonObject = null;
if( m_Instance == null )
{
singletonObject = new GameObject();
m_Instance = singletonObject.AddComponent<T>();
}
else
{
singletonObject = m_Instance.gameObject;
}
DontDestroyOnLoad( singletonObject );
singletonObject.name = typeof( T ).ToString() + " (Singleton)";
}
return m_Instance;
}
}
}
private void OnApplicationQuit()
{
m_ShuttingDown = true;
}
private void OnDestroy()
{
m_ShuttingDown = true;
}
}
▶ Sington 사용 코드 예제
public class Game : Singleton<Game>
{
public void OnScreenUpdate()
{
}
}
public class ScreenManager : MonoBehaviour
{
void Start()
{
Game.Instance.OnScreenUpdate();
}
}
● 싱글톤 사용에 있어서의 유의점
▶ 여기저기 데이터를 끌어다 쓰기 편하기 때문에 싱글톤이 남용되는 경향이 있음. 게임에서는 전역적으로 관리가 필요한 것들이 존재하지만 쓰기 쉽다는 이유로 그런것들을 모두 싱글톤으로 만든다면
1. 코드를 유지보수 할 때, 해당 싱글톤을 사용하는 모든 부분에 대한 체크가 필요해짐
2. 싱글톤 간의 데이터의 연결, 다른 클래스와의 데이터 연결 등 다양한 데이터의 종속성이 생겨 디버깅이 어려워지고 오류가 발생할 가능성이 커짐
3. Unity는 GC에 의해 메모리가 관리되는데, 이미 객체가 파괴되었지만 싱글톤에서 객체를 잡고 있는 경우가 발생하여 메모리 릭이 생길 수 있음
▶ 싱글톤을 여러개 만들기보다는 하나의 싱글톤에 전역적으로 필요한 클래스를 결합해서 사용
'Unity' 카테고리의 다른 글
[Unity] GC ( 가비지 컬렉터 ) (0) | 2020.04.30 |
---|---|
[Unity] Unity에서 스크립트 우선 순위 설정 (0) | 2020.04.30 |
[Unity] 프로그래밍 패턴 in Unity (0) | 2020.04.29 |
[Unity] 해상도에 따른 2D Camera 설정 (0) | 2020.04.26 |
[Unity] Layout 변경 (0) | 2020.04.23 |