서론
- 유니티로 게임 프로젝트를 만들어보았는데 유니티에 대한 이해도가 다소 부족한 것 같아서 공부하게 되었습니다.
- 다음 영상은 유니티 싱글톤 설명 영상 중에 가장 이해가 잘 되었던 영상입니다.
https://www.youtube.com/watch?v=a5TCCQgdv-E&t=11s
싱글톤이란?
- 싱글톤은 유니티 입문자들이 접근하기 쉽고, 게임 개발 시 많이 사용되는 디자인 패턴 중 하나입니다.
- 보통 게임을 만들다보면 전역 변수를 선언 후 인스펙터에서 드래그 앤 드랍으로 연결을 하게 된다. 하지만 게임이 복잡해질수록 전역 변수의 수도 늘어날 것이고, 그만큼 메모리도 많이 잡아먹게 된다. 이러한 문제를 해결하기 위해 싱글톤 패턴을 사용하는 것이 좋다.
- 싱글톤은 게임 내에서 공통적으로 관리하는 데이터를 모아놓은 유일한 클래스를 생성하고, 다른 클래스에서 싱글톤 클래스의 데이터를 접근할 수 있도록 만드는 것이다.
예를들면, 게임 데이터 저장, 게임 내 점수, 코인 관리, 오디오 관리 등이 있다.
싱글톤 구현
- 싱글톤이라는 개념 자체를 처음 접해보아서 위 영상을 따라 매우 가볍게 만들어보았다.
- 우선 싱글톤이라는 이름으로 오브젝트와 스크립트를 만들어주고 컴포넌트에 연결시켰다.
- Change Scene 버튼에는 다른 씬으로 전환하는 함수를 등록해놓았다.
public class SingleTon : MonoBehaviour
{
public static SingleTon instance = null;
private void Awake()
{
if(instance == null)
{
instance = this;
DontDestroyOnLoad(this.gameObject);
}
else
{
Destroy(this.gameObject);
}
}
}
- static으로 만든 이유는 어디서든 간편하게 접근하기 위해서다. 만약 static을 사용하지 않은 상태에서 다른 스크립트에서 해당 변수를 접근하려면 해당 스크립트에 SingleTon 클래스를 가진 전역 변수를 생성해서 관리해줘야할 것이다.
- 위 코드는 게임이 실행된 후 instance변수가 null 상태라면 해당 스크립트와 그걸 가지고 있는 오브젝트를 저장하고,
그게 아니라 이미 instance에 저장되어 있다면 그 오브젝트는 없애라. 라는 코드이다.
이렇게 해주는 이유는 씬을 전환할 때 이전 씬의 오브젝트는 전부 제거된다. 하지만 게임의 공용 데이터를 들고 있는 싱글톤 오브젝트는 씬이 전환되어도 필요하기 때문에 해당 오브젝트를 저장해주는 것이다. 그리고 그러한 오브젝트가 굳이 여러 개일 필요가 없으니 한 개만 저장하고 나머지는 전부 제거해주는 것이다.
- 이런 다음 Change Scene버튼을 누르면 메인 씬에서 전환하려는 씬으로 전환된다.
- 보면 메인 씬에서 뉴 씬으로 전환되었고, 코드에 따라 SingleTon스크립트를 컴포넌트에 가지고 있는 SingleTon오브젝트가 저장되어 씬이 전환되어도 제거되지 않는 모습을 볼 수 있다.
'Unity > Unity 디자인 패턴' 카테고리의 다른 글
[Unity 디자인 패턴] 팩토리 매서드 패턴(Factory Method Pattern) (0) | 2024.04.25 |
---|---|
[Unity 디자인 패턴] 심플 팩토리 패턴(Simple Factory Pattern) (0) | 2024.04.25 |
[Unity 디자인 패턴] 옵저버 패턴(Observer Pattern) (0) | 2024.04.22 |
[Unity 디자인 패턴] 컴포넌트(Component) 패턴 (0) | 2024.04.17 |