일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- Unity Editor
- 최적화
- RSA
- 단말기 해상도
- Tween
- DotsTween
- Job 시스템
- 암호화
- C#
- TextMeshPro
- sha
- 커스텀 패키지
- 샘플
- 이미지 폰트
- 텍스트 메시 프로
- 프레임워크
- unity
- Dynamic Font
- 다이나믹 폰트
- ui
- job
- Custom Package
- adfit
- base64
- 가이드
- Dots
- AES
- jumping ball
- Framework
- 2D Camera
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 |