식민지
본격적으로 남은 시스템은 식민지 메뉴입니다.
기본적으로 현재 스펙으로, 고 난이도의 디펜스에 도전해서 승리하면, 일정 시간마다 세금을 걷을 수 있는
이 게임의 최종 컨텐츠에 해당한다고 볼 수 있겠습니다.
잘못 다루다가 2일차에 만들었던 월드맵을 날려먹었는데(...)
어차피 관련 기획이 변경되어서 그대로 갖다 쓰기도 애매했으니, 새로 만듭니다.
월드맵 디자인하고 (이전과 달리 점령지에 해당하는 깃발은 프리팹을 동적으로 뿌려줄 예정입니다)

잠겨있는 지역을 터치하면 해금 조건을,

열려있는 지역을 터치하면 등장 적과 난이도, 클리어 보수와 세금을 알려주고 도전 버튼을 가진 팝업을,

공략이 끝난 지역을 터치하면 현재 개발 레벨과 쌓인 세금, 세금 회수 버튼, 지역 추가 개발 버튼을 가진 팝업을
각각 보여줍니다.
일단 모양만 만들어 놓았으니 내용 구현은 내일로.
안드로이드 단말에서의 크래쉬 문제 해결
왜 크래쉬되는걸까?
cocos2d-x는 보통 로그캣에서 fatal로 검색하면 나오는 에러 메시지를 추적하면 답이 나옵니다.
그런데 이건 그런게 없네요.
어디서부터 손대야 할지 막막하고,
성능 체크하는 툴들이 있는데 이건 기본적으로 최적화 툴이고,
지금 이 게임이 최적화..문제가 없다고 장담은 못하겠지만, (뭐 일단 초보자가 누덕누덕 기워 만든 게임이니)
저런 툴로 잡아낼 수 있는 문제이긴 한지도 모르겠고요.
코드 문제로 인한 크래쉬라면 최소한 실행은 되다가 죽던가 해야 하는데, 이건 그냥 시커먼 화면으로 있다가 강제 종료되니까.
이 시점에서 이게 코드 문제는 아니거나, 혹은 초기화 과정의 문제이거나 둘 중의 하나로 짐작합니다.
일단 고전적인 방법, 하이어라키에서 실행 될 때 까지 하나씩 꺼 봅니다.
...UI만 남겨놓으니까 돌아가기는 하는데, 이것도 켜놓고 있으면 간혹 꺼지더라구요.
이것때문에 처음엔 코드 문제인가 고민했습니다.
그런데, 대부분은 시커먼 화면으로 있다가 강제 종료되니까,
이건 초기화 과정의 문제겠다-게임 씬이 아닌 타이틀 씬 같은 건 잘 나오거든요-라는데 생각이 미칩니다.
그런데 지금 상황에서 서버에 연결하는 것도 아니고, 사용자 데이터 로드하는 것도 아니라 딱히 초기화라 할만한게..?
아 설마..?

이건 수정 전의 GameManager.cs의 Start 함수 내용입니다.
코드 내용이 중요한게 아니고,
다량의 문자열 리터럴(대체로 붉은 부분)과 이걸 이용한 구조체 배열 초기화가 들어가 있는 겁니다.
물론 PC같은 환경이나 c++에서는 오버헤드가 문제되지 않는 수준의 코드라서,
정말 이것 때문에 죽는단 말야? 의심이 갔습니다만,
지나가다 c# string이 유니티에서 부하가 엄청 크다는 얘기를 어디서 본거 같단 말이죠..
하이어라키에서 꺼놨던 모든 오브젝트들을 활성화시키고,
1. GameManager 스크립트를 포함한 빈 게임오브젝트만 하이어라키에서 꺼 보았다
돌아갑니다...
2. GameManager 오브젝트를 활성화하고 대신 Start 함수 내용을 주석처리 해 보았다
돌아갑니다...
거의 확실해졌다 싶어서
Start의 내용을 몇 개 함수로 분리해서 리터럴을 분산시키고,
루프문 돌려서 구조체 초기화하는 부분을 코루틴화 했습니다.
처음 설치 후 바로 실행했을 때는 화면이 나오다 튕기긴 했는데,
다시 실행해 보면 이제 튕김 없이 잘 돌아갑니다.
...
이번엔 운 좋게 감이 맞아 떨어졌는데, 사실 이렇게 하면 안되죠.
아무리 초보자라도, 실제로 초기화하다 죽는게 맞는지. 로그라도 찍어보는게 올바른 수순인데
유니티는 단말기에서 로그 찍어보는 것도 뭔가 절차가 복잡해 보여서 당시에는 머리에 전혀 들어오지 않았습니다.
귀찮아서 미룬 거지만 디버깅이나 최적화에서는 절대 지양해야 할 방법입니다.
at 2022/02/18 08:19












덧글