내가 만들고 있는 게임 내에서 건설은 2종류가 있다. 하나는 맵에 쓰이는 건물 건설과 다른 하나는 선실 건설.

현재 화면은 게임 내에서 중요한 장치인 기차 '스틸웨일'의 선실 건설 패널이다. 지금은 UI 틀만 잡아 놓은 상태고 건물 건설 패널과 비슷한 로직으로 작동해야 한다. 일단 파란 네모 안에 있는 카테고리 버튼을 누르면 각 카테고리에 해당하는 건물 아이콘이 나와야 한다.


미리 만들어둔 맵에 쓰이는 건물 건설 패널. 건물 컨셉에 맞게 '금속, 연료, 식량, 목재, 기술, 도시, 주거'로 나뉘며 카테고리 버튼을 누르면 해당하는 건물 중 생산 가능한 건물이 나온다. 건물 아이콘에 마우스를 올리면 건물에 대한 정보 팝업이 뜬다. 지금 만들 선실 패널도 이와 비슷하게 진행되어야 한다.


1. 카테고리 버튼(파란 네모)을 누르면

2. 미리 열려있던 모든 버튼을 초기화 시키고

3. 카테고리 버튼에 할당된 건물 정보를 받아와서

4. 그 중 해금되어 건설 가능한 건물(보라 네모)만 떠야한다.

5. 의도한대로 진행되면 2개 버튼이 나와야하는데 현재는 1개 버튼만 뜨고 있다.

뭔가 문제가 있다. 구현은 되었는데 반쪽만 되고 있다. 일단 구현은 했으니 괜히 더 건드리다 아예 안떠버릴 수 있으니 정보 팝업 창이 나오는지도 확인해본다.


정보 팝업창(보라 네모) 자체는 잘 뜬다. 내용이 적히지 않은 것은 아직 건물 정보를 받아오는 함수를 짜놓지 않았기 때문에 팝업창만 뜨면 지금으로선 성공이다. 그럼 이제 앞 짤에서 언급한 문제를 살펴보자.


카테고리 버튼을 클릭(On Click)할 때 발동하는 함수들 목록이다. 초기화는 제대로 되었으니 Slot_All_Reset 함수는 건드리지 않고 보라 네모만 살펴보면 된다. Slot_Change_Category 함수에 6자리 숫자가 적혀있다. 맨 뒤 두 숫자는 무시하고 앞의 4개 숫자는 각각 2글자로 나뉘어서

'00' - 버튼 리스트 번호

'08' - 선실 정보 리스트 번호

를 의미한다. 0008이면 0번째 버튼 리스트에다 8번 선실 정보 리스트를 불러오라는 뜻이다. 현재 0008하고 0109가 있으니 의도한대로 작동하려면 0번 버튼 리스트에 8번 선실 정보 리스트가, 1번 버튼 리스트에 9번 선실 정보 리스트가 떠야 한다.


스틸웨일 관련 데이터를 관리하는 매니저 스크립트의 인스펙터(보라 네모)가 선실 정보 리스트의 9번 항목이다. 이 항목에는 테스트용으로 이름만 만든 총 1개의 선실 정보가 있다. 스크립트 상에서 bool(참 거짓만 따지는 변수)값인 Unlock이 true일 때만 버튼이 켜지도록 해놨다(하단 노란 줄) 

보라 네모 안의 Unlock값이 트루가 되어있다. 그러면 떠야 하는데 뜨질 않은 것이다. 보통 이 경우는 2가지 문제로 좁혀진다.

내 기억에 문제가 있다.

내 판단에 문제가 있다.

둘 중 하나다. 둘 다인 경우도 있고......일단 어디서 에러가 떴는지 찾아보자. 스크립트 상으로는 맞는 것 같은데 구현이 안되면 어딘가에서 빵꾸가 났다는 것이고, 빵꾸가 나면 에러 메세지가 남는다.


에러 메시지들을 무작정 찾는 건 약간 자존심 상하니 debug.log(노란 네모)로 이 함수가 발동할 때 기록이 남도록 해보자. 둘 다 작동되면 콘솔에 "이게 되고", "이게 안되고"가 동시에 떠야 한다. 


노란 네모인 "이게 되고"만 나오고 보라 네모인 "이게 안되고"가 안뜬다. 그러면 이제 문제가 좁혀진다. 스크립트에서 내가 뭘 잘못한거다. 0008이 작동해서 노란네모가 나왔는데 0109가 작동하질 않아서 보라 네모가 콘솔에 안 적힌다? 스크립트에 문제가 있을 게 분명하다.


디버그.로그로 기록을 남긴 덕에 에러 메시지 찾기도 쉬웠다. 에러 메시지가 이르기를 SteelWhaleBuildingSlotManager 스크립트의 52번 줄에 하자가 있다고 한다.

52번 줄에는 Slot_Change라는 함수가 발동한다는 내용 밖에 없다. 그러면 이 함수에서 뭔가 문제가 있다는 것이다.


스파게티 코드를 헤집으면서 문제를 찾았다. 스크립트가 아니라 인스펙터 문제였다. 리스트를 불러오면 리스트의 Index를 불러와야하는데 그 Index를 스크립트 상에선 5개를 찾는데 인스펙터에는 0개로 설정해 놨다. 앞서 말한 2가지 문제에 정확히 해당한다.

인스펙터 관리를 안 한 내 기억이 문제였다.

스크립트가 문제일거란 내 판단이 문제였다.

에라이;;


다음 할 일

건물 정보를 옮겨 놓고 정보 팝업창이 뜰 때 이 정보를 활용하자.