티스토리 뷰

객체지향에는 싱글톤이라는 디자인 패턴이 존재한다.

전체 프로젝트를 통틀어서 하나만 존재하는 클래스라는 의미로, 전체적인 구성의 중계점 역할을 하는 클래스를 말하는 디자인 패턴으로, 씬 전환을 구현해야 하는 유니티에서는 안쓰고 싶어도 안 쓸 수가 없는 기능이다.

다만, 이러한 싱글톤도 난점은 존재한다. 바로 '씬이 넘어가는 경우의 행동'을 정의하기가 힘들다는 것이다.

특히 배경음악이나 스테이지 상황 같은 것을 싱글톤으로 자주 작성한다는 점을 고려하면 상당히 골때리는 점.

그럼 이제, 이러한 '씬 전환'을 더 용이하게 구성할 수 있는 방법에 대해서 정리해 보도록 하자.


매니저 클래스에 초기화 함수를 넣지 않기

매니저 클래스에서 초기화를 수행하는 것이 아니라, 구성 요소들의 초기화의 결과로 매니저 클래스가 초기화가 되도록 구성하는 방법이다.

매니저가 클래스 간의 중계자라는 점을 이용하는 방법으로, 실질적으로는 매니저 클래스는 씬이 넘어가도 그대로 유지되지만 결과적으로는 초기화 한 것과 동일한 결과를 얻어내는 방법.

 

다만, 사운드 매니저 처럼 아예 하나의 기능을 담당하는 경우도 있기 때문에 이것 만 활용하는 것은 무리다.

대신 캐릭터 매니저 같은, 클래스 내용을 공유하는 용도로 사용되는 매니저 클래스에는 유용하게 사용할 수 있는 방법이다.


매니저 클래스 폭파하기

싱글톤 클래스에 자신을 파괴하는 함수를 넣어서 씬을 넘어갈 때 새로 만들어지도록 만드는 방법.

필요에 따라서 씬을 넘어가도 적용되지 않도록 구성도 가능하기 때문에 일단 만들어 두면 꽤나 편해지는 방법이다.

물론, 폭파시키는 만큼 가지고 있는 정보는 전부 날라가는 셈이라서 어떻게 구성할 지를 다소 고민 해 봐야 하는 방법이기도 하다.

 

코드도 깔끔하게 구성되므로[그냥 Destroy만 있으면 된다.] 간단한 매니저 기능이나 한시적인 매니저 기능에 사용하면 유용한 방법.


씬 관리 클래스 작성

그냥 씬의 시작과 끝, 경과를 담당하는 클래스를 따로 둬 버리는 방법.

즉, 일전의 [GameObject 라이프 사이클의 난점]에서 처럼 매니저 클래스의 초기화를 다른 클래스에서 호출하는 방법이다.

이외에도 씬의 경과를 전체적으로 담당할 수도 있기 때문에 이래저래 써먹을 수 있는 요소는 많은 편이다.

[물론, 일반적으로 이건 GameManager의 역할과 겹치는 편이긴 하다.]

 

거기다가 UI를 생성하는 로직을 같이 넣어놓는다던가, 해당 씬의 BGM을 지정한다거나, 씬이 종료될 때 없어져야 하는 내용도 작성할 수 있는 등, 전체적으로 활용성이 좋은 방법이라고 볼 수 있을 것이다.


사실 금일 작성한 내용은 비단 싱글톤에만 적용되는 내용은 아니고, 전체적인 배치에도 활용할 수가 있는 내용이다.

그러니, 3가지 방법 모두 어떻게 사용할지 고찰 해 보고, 그 장단점에 따라서 무엇을 선택할 지에 대해서 익숙해지면 좋을 것이라 생각한다.

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
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
글 보관함