반응형
Unity에서의 싱글톤은 일반적인 C#에서의 코드와는 다르며 일반적인 코드는 아래와 같습니다.
public class Settings : MonoBehaviour
{
private static Settings inst_ = null;
public static Settings Inst
{
get
{
return inst_;
}
}
private void Awake()
{
if (inst_ == null)
{
inst_ = this;
DontDestroyOnLoad(gameObject);
}
else
{
if (inst_ != this)
{
Destroy(gameObject);
}
}
}
}
위의 코드에서 보면 알 수 있듯이 처음 인스턴스를 만들 때는 gameObject에 대해서 DontDestroyOnLoad를 호출하여 씬이 변경되어도 삭제되지 않게 합니다. 다음으로 추가로 인스턴스가 만들어 질 때는 새롭게 생긴 gameObject를 Destroy하여 삭제합니다.
위와 같은 코드는 gameObject에 연결된 객체(컴포넌트)가 씬의 변경에 따라 삭제되지 않게 합니다. 그런데 여기서 중요한 유니티 싱글톤의 특성이 있습니다.
해당 코드를 작성한 객체뿐만 아니라 해당 객체와 연결된 gameObject에 연결된 모든 객체(컴포넌트)가 같은 싱글톤의 특성을 가지게 되어 씬의 변경에 따라 삭제되지 않습니다.
이를 응용하면 싱글톤인 객체와 연결된 gameObject에 일반 객체를 연결(등록)하여 씬의 변경에 따라 삭제되지 않고 자신의 정보를 가진 객체로 사용할 수 있습니다. 즉, 씬간의 이동에 기존 정보를 가지고 있는 객체를 위하여 사용되거나 씬간의 정보 이동을 위하여 사용할 수 있습니다.
반대로 싱글톤인 객체와 연결된 gameObject에 등록된 객체는 씬간의 이동에 따라 정보가 초기화 되지 않는 관계로 새로운 씬에서 기존 씬에서의 정보로 인하여 오류가 생길 수도 있습니다.
반응형
'개발 라이브러리 & 툴 > 유니티' 카테고리의 다른 글
Unity 안드로이드 개발시 알아두면 좋은 것들 (0) | 2021.12.27 |
---|---|
Unity 안드로이드 빌드 시 화면 멈춤(Freezing) 현상 해결 (0) | 2021.12.26 |
Unity 여러 개의 카메라를 이용하여 여러 개의 포스트 이펙트 적용하기 (0) | 2021.12.03 |
Unity 개발시 편집 중인 텍스트나 csv파일 데이터를 게임에서 읽기 (0) | 2021.11.26 |
Unity 2D 카메라 화면 크기 및 좌표 범위 얻기 (0) | 2021.11.24 |
Unity 씬 이동 간에 빈 이동 씬을 이용하여 최대 사용 메모리 줄이기 (0) | 2021.11.23 |
Unity 스크립트 수정 후 스크립트 관련 대화상자 뜨는 시간 줄이기 (0) | 2021.10.29 |
Unity 정적(Static)객체를 전역 변수처럼 활용하기 (0) | 2021.10.22 |