[Unity/TIL] 프로젝트 구조의 중요성, 초기화 & 생명주기의 중요성, LoadScene 비동기 함수, Enter Safe Mode 알림
프로젝트 구조의 중요성
오늘의 키워드 중 하나를 프로젝트 구조의 중요성이라고 정했다.
게임 로비에서 난이도를 정해서 게임 씬으로 넘어가기로 결정했는데, 오전 회의 때 난이도에 따른 로직 변화 구조에 대한 논쟁(?)이 있었다. 내가 난이도에 따른 로직 구현을 맡게 되어 '싱글톤으로 만든 GameManager 에 난이도 변수를 넘겨주고 로직에서 변수를 조정하는 방식'을 제안드렸다. 하지만 씬을 넘겨주는 파트를 맡으신 팀원분께서 '난이도별 씬을 따로 만드는 방식'을 원하셨기 때문에 그 방식을 따르게 됐다.
그런데!!! 씬에 무언가 추가하는 작업을 할 때마다 일을 두 번씩 하게 되면서 작업이 느려지게 되자 또다른 팀원분께서 다시 구조 변경을 제안해주셔서 게임 씬을 하나로 두고 난이도 변수로 조절하는 것으로 변경하게 되었다..~
처음에는 내가 "난이도가 늘어날 때마다 씬을 복사해서 사용하는 것은 비효율적이다"라고 확장성을 근거로 GameManager 에 난이도 변수를 넘겨주는 방식을 주장했다. 당장은 난이도를 늘릴 일이 없었기 때문에 근거가 너무 추상적이어서 팀원분을 직접 설득시킬 자신이 없었던 것 같다. 앞으로는 오늘 직접 경험한 것을 근거삼아 조금 더 자신감을 가지고 구조를 만들어갈 수 있을 것 같다!
초기화의 중요성
우리팀에 고수분이 있어서 오늘 자료구조를 활용해서 여러 가지 시도를 하셨는데, 싱글톤 구조에서 씬에 있는 게임 오브젝트를 참조해서 자료구조에 넣어놓고 게임오브젝트가 사라졌을 때 여전히 사라진 오브젝트를 가리키고 있는 문제가 발생했다. 씬을 이동하거나, 어떤 오브젝트를 Destroy할 때 참조했던 자료구조에서 빼주지 않은 것이 문제였다. 빈 곳을 참조하는 문제는 원래 주의해야 하지만, 게임 개발을 할 때는 특히 생명주기를 잘 모르면 그런 문제가 많이 발생하는 것 같다.
그리고 그런 상황에 디버깅을 할 때 함수 실행 순서를 잘 이해하고 있어야 디버깅도 오해없이(?) 진행되더라.
아! 그리고 고수 팀원분께서 UIManager라는 존재를 싱글톤으로 만들어 두셨는데 UI를 씬이 이동해도 그대로 두는 경우가 없다고 생각해서 왜 싱글톤일까? 의문이었다. 생각해보면 우리 게임이 간단한 게임이라 그렇지 다른 게임에서 씬을 이동해도 하단 바가 존재하는 등의 경우를 많이 봤던 것 같다. 납득됐다!! 다양한 팀원분들을 만나다 보면 이런 의외로 몰랐던 부분을 배워갈 수 있어서 좋은 것 같다.
SceneManager.LoadScene() 함수 뒤에 코드 실행
아래 코드에서 UIStack.Clear()가 실행될까?
안 될 것 같았는데 작동하길래 알아보니 SceneManager.LoadScene 함수를 실행한 이후에도 현재 프레임의 코드들은 여전히 실행되기 때문이다. 다음 프레임부터 새로운 씬의 Awake() 및 Start() 실행.
프로젝트 열 때 Enter Safe Mode 알림
다른 팀원 분의 브랜치로 체크아웃한 이후 프로젝트를 열 때 Enter Safe Mode로 열겠냐는 알림이 떴다.
이건 현재 프로젝트에 컴파일 오류가 있기 때문에 정상적으로 로드되지 않을 수 있다는 경고라고 한다. Safe Mode로 최소한의 시스템만 로드하여 오류를 빠르게 해결할 수 있도록 해 준다.
나는 팀원분이 오류를 해결한 코드를 다시 커밋해주셔서 Safe Mode를 활용하진 않았다.
내일부터 프로젝트에 히든 스테이지를 덧붙이기로 했는데, 우리 팀이 지금 재미난 계획을 가지고 있다. 기대가 된다.