[WP] 싱글톤 관리 디버깅

혀니앤·2022년 3월 24일
0

🐞저번에 남아 있던 버그

  1. 타이틀로 돌아갔다가 타이틀 화면으로 나왔다가, 다시 게임으로 돌아가면 UI나 매니저가 유지되지 않는 현상
  2. 설정 이미지가 흐린 현상

☝️ 싱글톤 문제

싱글톤은 전체 프로젝트를 통틀어 단 하나의 인스턴스만 존재하는 소프트웨어 디자인 패턴이다.
방탈출 게임의 특성상 여러 씬을 자주 오가기때문에, UI와 매니저의 경우 계속해서 새롭게 로드하는것보다 하나의 싱글톤 인스턴스를 Don'tDestroyOnLoad로 이동시키며 이용하는 것이 나을 것이라고 생각했다.
그런데 아무래도 처음 쓰는 것이다보니 개념도 익숙하지 않고 활용도 제대로 하지 못했다ㅠㅠ

원래는 설정에서 타이틀로 이동할때, 매니저는 유지하고, UI 캔버스만 보이지 않도록한 후 타이틀을 거치도록 하려고 했다.
이 과정에서 싱글톤은 가장 처음에만 오브젝트가 만들어지기때문에, 보통 GameObject의 Start를 통해 초기 설정을 했지만, Start함수가 원하는 순간마다 실행되지 못했다.
따라서, 초기 설정 과정을 직접 설정해주어야 하는 단점이 있었다.

어떻게 해결해야 할까?

우선 내가 언제 초기 설정을 해주고 싶은지를 생각해보았다.
타이틀로 가는 경우에 초기 설정을 해주고 싶었는데, 유저가 플레이하면서 타이틀로 가는 경우가 고의가 아니라면 크게 많지 않을 것으로 판단했고, 이를 게임을 아예 새로 시작한다고 생각하기로 했다.
즉, 게임 한 번 실행 당 한 번의 싱글톤을 사용한다.

이 아이디어를 기반으로 코드를 정리했다.

⭕ 해결

인맵 Scene의 경우 모두 UI, 매니저 오브젝트를 가지고 있기 때문에, 어떤 인맵에 들어갔는데 싱글톤 인스턴스가 없다면 자동으로 생성될 것이다.
=> 타이틀로 이동하여 싱글톤을 삭제하고, 게임을 실행하면 자동으로 생성되도록 한다.
타이틀로 이동하면서 삭제할 수 있었지만, 인맵 씬 내부에서 삭제할 경우 Frame에 따라 충돌이 일어날 수 있다고 생각했다.
따라서 타이틀로 이동한 후 삭제해주었다.

+혹시나 UI object를 inactive로 설정하는 경우를 대비해서, 게임 시작시 UI를 setActive해주려고 했는데

if(FindObjectOfType<UISingleton>()==null)	FindObjectOfType<UISingleton>().setActive(true);

위의 코드를 실행했더니 아예 UI가 보이지도 않았다.
아직까지는 문제가 없어 넣지않아도 되는 코드였지만 왜 작동이 안되는진 모르겠다

🪄 실행 화면

velog 이미지 용량 제한이 15메가라 움짤 프레임 수를 줄였더니 끊기는것처럼보이긴하지만 정상적으로 잘 움직인다!
다음엔 이미지 크기를 줄여야겠다

남은 버그

  1. 설정창이 이미지가 흐린 현상
profile
일단 시작하기

0개의 댓글