항상 프로젝트를 진행할 때 각 기능의 Manager를 만든 다음에 모두 싱글톤화 하여
접근했던 경험이 있다. 하지만 이번 팀 프로젝트에서는 GameManager만 싱글톤화 하여
모든 매니저를 관리하기로 했다. 이를 통해서 얻게 된 지식을 설명하고자 한다.
1. GameManager 싱글톤
우선 GameManager를 싱글톤화 하려면 싱글톤 기능을 선언해야한다.
제일 기본적인 형태는 "static 클래스명 이름(Instance)" 의 형태로 선언 후 Awake 부분에
"이름(Instance) = this"의 형태로 사용하면된다.
위 사진처럼 조건이 필요할 경우 Awake 부분에 알맞게 적용하면 된다.
그 후 자신이 관리할 매니저들과 클래스들을 선언하여 다른 클래스들이 접근할 수 있도록 준비한다.
2. GameManager Unity
1의 과정을 거쳤다면 이렇게 Unity상에서 값을 넣을 수 있도록 표시된다.
각 Manager의 script값들을 넣어주면 모두가 같은 객체를 공유하며 사용할 수 있는 상태가된다.
예를 들어 인벤토리의 값을 인벤토리 UI클래스에서 접근을 해야한다면
위 사진의 형태와 같이 사용하면된다. 말로 설명하자면 게임매니저에서 선언한 이름 (instance)으로
게임매니저에 접근하여 그 안에 있는 inventory정보를 가져와서 inventory안에 있는 함수인 SelectItem를
사용한다는 것이다.
많이 복잡해 보일 수 있지만 아무곳에서나 객체 생성을 해버리면 객체를 공유하고있는 연결이 굉장히 불안하게 되어
원하는 정보를 얻지 못한다. 그렇게 되면 코드상에 오류가 발생하여 많은 문제를 야기하게 된다.
3. 주의사항
2번 째 사진을 보면 Inventory부분에 Inventory Script가 바로 적용되있는 것이 아니라 Player에 담긴 Inventory Script를 가져온다. 만약에 Player에 꼭 Inventory를 넣어야 실행되는 Script나 기능이 있을 경우 이렇게 사용하게 되는데 만약
Player에도 스크립트를 넣고 GameManager부분에도 스크립트를 따로따로 넣게된다면 Inventory데이터가 공유되는 것이
아닌 각각의 다른 Inventory정보를 가지게 된다. 그렇게 된다면 원하지 않은 정보를 얻게되어 코드상의 오류가 발생할 수 있다.
회고
싱글톤이라는게 어떻게 보면 굉장히 편리한 기능이지만 이를 잘못 사용한다면 오히려 더 큰 문제를
발생할 수 있으니 개념을 확실히 알고 넘어가는 것이 좋다고 생각했다. 다음에는 다른 디자인패턴들을
공부하여 프로젝트에 적용해보고싶다.
'TIL > Unity' 카테고리의 다른 글
[Unity] 애니메이션 동작에 함수넣기 (0) | 2023.10.04 |
---|---|
[Unity] Prefab을 독립적으로 관리하는 법 (0) | 2023.09.27 |
[Unity] 최적화 방법 StringtoHash (0) | 2023.09.25 |
[Unity] 사용자의 입력을 받는 기능 Input Field (0) | 2023.09.22 |
[Unity] 인벤토리 UI를 쉽게 만들어주는 Grid Layout (0) | 2023.09.21 |