싱글톤 일반화
<싱글톤>
public static GameManager instance = null;
public void Awake()
{
if(instance ==null)
instance=this;
else
Destroy(gameObject);
DontDestroyOnLoad(gameObject);
}
-static으로 선언하면 하이라키 창에 올려두지 않아도 플레이 시 자동적으로 데이터 영역에 할당됨.
-instance = this에 this는 자기 자신의 주소를 가르키는 것.
싱글톤을 게임매니저, 오디오매니저 등 여러 곳에서 사용하면 좀 더 효율적으로 관리하기 위해
싱글톤 클래스를 만들고 상속해주게 할 수 있음
public class Singleton : MonoBehaviour
public class GameManager : Singleton
public class AudioManager : Singleton
그렇게 할 경우 발생하는 문제점
1. 다른 스크립트에서 GameManager.Instance. 를 사용해 접근할 경우 게임매니저에 있는 변수나 속성에 접근 불가
인스턴스가 게임매니저의 인스턴스가 아니고 싱글톤의 인스턴스이기 때문
2. 오디오매니저/ 게임매니저 등 여러개에서 싱글톤을 상속받을 경우 플레이하면 하나만 남고 사라짐
>>공통된 원인 : 싱글톤을 상속받은 각각의 놈들의 인스턴스가 존재해야한다.
>>해결 : 싱글톤을 일반화 시켜줌
각각 싱글톤을 사용할 때 다른 부분만 T로 추상화 시켜준다.
주의) Awake가 public 이나 protected로 돼있어야함
게임매니저에서 상속 받을 때는 이렇게 사용한다.
base.Awake();는 부모의 awake를 먼저 실행하게 하는 것
이렇게 되면
각각의 인스턴스가 생기게 된다.
첫 인스턴스는 싱글톤의 인스턴스이다.
'C# > C# 학습 (TIL)' 카테고리의 다른 글
C# 중급문법 Day5 Action / Func / event / 람다 (0) | 2022.06.20 |
---|---|
C# 중급문법 Day4 Deligate (0) | 2022.06.17 |
C# 중급문법 DAY1 추상클래스/인터페이스/콜렉션/foreach/var/object (0) | 2022.06.15 |
C# 중급문법 DAY2 확장메서드 /일반화(where T :)/ 딥카피/ 싱글톤 일반화 (0) | 2022.06.15 |
제트카라 커스텀/Jet Kara Custom/C# Unity (0) | 2022.04.13 |