녹픽던 + 타르코프 같은 겜 만드는 중
원래 계획 대로면 당당하게 내 놓을 만한 데모 버전이 저번달에 나왔어야 했는데, UI 씨름하느라 벌써 계획이 엄청 밀림
영혼이 깎여나간다
고도로 전환한 시기가 10월, 지금 8개월 박았는데 암담하긴 함
마음의 여유가 없어서 플엑도 가려다 포기했는데, 좀 쉴 겸 올림
1. 기초적인 필요 툴 완성
요즘이야 괜찮은 플러그인들이 많이 생겨나고 있는데, 딱 내가 시작할 때 까지만 해도 뭐가 정말 없었다
그런 플러그인들이 좀만 빨리 나왔으면 시간 좀 아꼈을텐데
처음에 만든건 스프라이트 아틀라스 에디터
고도 시작한 초기에 만든 툴인데, 아마 내 글 봤던 사람도 있을거임.
만든 이유는 설명하면 좀 긴데 요약하자면 pivot 수정을 용이하게 하기 위해서, 또 관리하기 편하게 하려고 만들었음
동시에 만들었던 게 유니티식 imgui, 디버깅 툴도 쉽게 만들 겸 해서 구현함
그 당시에도 찐 IMGUI를 지원하는 플러그인이 있긴 있었는데, 에디터에서 문제가 발생 시 그냥 크래시가 나버리고 뭔가 문제가 많았음
그리고 타일 텍스쳐 생성기. isometric은 딱 원하는 생성기를 찾지 못해서, 그냥 찾을 시간에 만들자 해서 만들었음
생성에 오류가 있긴 한데 나중에 고치자 하고 걍 쓰는 중
그리고 예전에도 올린 적 있는데, 맵 에디터도 만들었다.
다만 타 툴은 에디터에서 바로 만질 수 있는데, 맵 에디터의 경우는 똑같이 하려면 좀 여러 귀찮은 점이 있더라
무조건 에디터에서 돌려야 한다, 이런 규칙이 있는 것도 아니라 게임 실행 후 돌리는 것으로 만듬
이 외에도 xml 에디터 등 몇 개 더 있다
생산성 면에서 안 만들 수 없던 것이라 만든 걸 후회는 안 하는데, 몇 개는 플러그인 괜찮은 거 나중에 나와서 속 좀 쓰림
2. 인게임 그래픽 렌더링
아마 이게 시간 제일 많이 잡아먹었을 거임
유니티에서 고도로 넘어간 겸, 요상하게 아이소메트릭 뷰에 꽂힘. 지금 생각해보면 굳이 고집할 필요가 있을 까 싶었지만, 그땐 그랬다.
근데 이게 쉽지 않더라.
먼저, 고도는 z축을 지원하지 않음. z index의 경우 가용 범위가 너무 좁음(-4096~4096)
그래서 그나마 무난한 방식이 Y정렬을 이용한 방법이었음.
요약하자면 해당 객체의 게임 내 위치에 따라, y 위치랑 오프셋을 요리조리 조절하는 형식이었음
그래서 긴 오브젝트는 저렇게 썰어서 표현함
그런데 이 방법을 택함에 따라, 타일맵에서 문제가 발생함
타일맵의 경우 Y정렬의 성능이 심각하게 떨어졌고(4.2 기준 해결됨)
c#에서 타일을 동적으로 수정하면 성능 상 문제가 발생했음
그래서 타일맵 타일셋 자체를 아예 새로 짰다.
예를 들어서 이렇게 렌더링을 했다 할 경우,
이렇게 y 위치가 같은 걸 묶어서 한 Canvasitem에서 그리게 함
기존 타일맵이라면, 100*100만 표시해도 10000개를 매 프레임마다 y정렬을 하는데,
저러면 100개만 정렬해도 되어서 y정렬 문제가 거의 없어짐
물론 C#에서 하나하나 renderingserver로 그릴 영역을 업데이트 해야 해서 성능 상의 문제가 예상되기는 하는데,
일단 프레임 드랍 하나 없이 큰 문제 없이 돌아가서 최적화는 나중에 하기로 함
사실 구현 자체는 하루도 안 걸렸는데, 여러 문제점을 해결 하느라 시간을 많이 잡아 먹었음. 앞으로도 계속 만져야 할 듯
그리고 이거 때문에 다음 작품은 덱빌딩 아닌 이상 3d로 하기로 맘 먹음
3. 로그라이크 턴제 시스템 구현
유니티로 만들다 유기한 전작의 경우, 지금 생각해보면 내 능력에서 벗어난 시스템이었음.
그 당시 계획이 어땠었냐면,
1. 심리스 오픈월드
2. 게임 쓰레드와 메인 쓰레드 분리. 전자는 내부 게임 로직을 막힘없이 돌리고, 후자는 게임 로직의 시그널을 받아서 ui나 게임 화면에 렌더링 할 것들을 순차적으로 해결
그래서 어떻게 되었느냐? 구현은 했지만 내 입장에서 유지 보수가 힘들 정도로 시스템이 복잡해짐
대표적으로 시야 시스템과, 몇몇 행동의 경우 여러 캐릭터들이 동시에 행동하게 보여야 한 다는 점, ui 동기화 등이 발목을 잡았음
그래서 고도로 넘어갈 때, 욕심을 그냥 다 버림.
1. 뭔 오픈월드냐, 걍 한정된 던전을 돌아다니는 식으로 하자.
2. 일단 걍 한 쓰레드에서 다 해결하자. 문제 생기면 그때 고민해보자.
동시에 행동해도 상관 없는 특정 행동,
예를 들어서 이동 같은 것이 거의 동시에 보여지는 것이 중요했음.
안 그러면 플레이어가 AI 행동들을 기다려야 하는 시간이 너무 길어지니까
그러면서 시야 시스템이 잘 작동하고, 시야 밖 요소들은 무시하거나 시간 잡아 먹지 않고, 여러 조건이 많았는데
거의 싹 다 해결함
욕심을 버리니 훨씬 쉬워지더라.
맵도 그냥 한정된 구역만 구현하면 되고, 플레이어에게 멀어진 ai 뭐 이런거 처리 고민 안 해도 무방함.
뭐하러 첨부터 멀티쓰레드를 도입하려 했는지. 걍 순차적으로 돌려도 문제 없었음. 작업량도 크게 줄음
그 외 시간, 시야와 pahtfinding 시스템, 기초적인 AI 등 구현함
원래 빛과 소음 시스템도 계획에 있긴 한데 언제 넣을 진 모르겠다
4. UI 구현
진짜 너무 고통스러움. 다른 게 문제가 아니라 생각보다 개발이 너무 느리고 생각보다 완성품도 만족스럽지 못함
본디 목표는 작년에 푹 빠졌었던 발더스게이트 3의 반절 정도라도 구현 하자, 이런 방향성이었음
문제는 여러가지 신경 써야 할 부분이 너무 많다는 거임
그래도 진전이 보이긴 함
너무 진행이 안되고 있다 보니 성능 포기(문제 될 만한 부분은 더티플래그로 다 때우기)
테트리스 인벤토리 시스템 포기(아이콘 그리기 고역임)
쳐내고 쳐내고 하다 보니 큰 윤곽은 잡힘.
당연히 있는 하단 게임 바
아이템 드래그 드롭, 장착
이왕 테트리스 인벤토리 시스템 버린 김에 추가한 검색, 아이템 정렬, 아이템 필터 시스템
지금 돌려보니 어디 잘못 건드렸는지 오류 뿜으면서 작동 안되는 Perk 찍는 창
아
설정 메뉴, 대화 시스템, 툴팁 등
여전히 갈 길은 멀지만 끝은 보인다, 이 정도 같음 지금
근데 하 진짜 뭔가 나랑 안 맞는 작업인지 돌아버리겠음 진척이 뭐 이렇게 느린지 모르겠다
턴제 시스템과 동화되어야 하는 부분에서 문제가 자꾸 생기고
그 부분에 별 문제 없어도 그냥 디자인 하는 것 자체가 고역임
5. 그 외 푸념
하면 할 수록 1인 개발로 겜을 완성한 사람이 대단해보임
내 작업 상태가 이 꼬라지임.
기어가는 UI, 도트 그리기
그나마 진행되는 시스템, 툴 구현
무난하게 채워지는 게임 컨텐츠(아이템, 스킬, 맵)
혼자서 모든 것을 해야 하는데, 각 작업마다 효율 차이가 크더라.
근데 하나에 완전 집중해서 해결하려고 하면, 정신력이 나가다 보니 병행하게 됨
그러니 문제가 게임 테스트가 잘 안됨
지금 시스템 상에는 퀘스트 시스템, 물물교환 시스템 등 막 여러가지 구현되어 있고
던전 절차적 생성 코드들 여러가지 쌓여 있는데
UI가 구현 안되었거나, 도트를 아직 덜 그렸거나, 작업들이 동기화가 안되어 있으니 속이 그냥 답답 하고 터질거 같음
게임 화면을 재깍 재깍 보고 테스트하고 싶은데 그게 너무 더뎌지는 느낌
그래도 필요한 시스템 하나 둘 채워지니 저 끝에 빛은 보인다
아직 해야 할 작업이 너무나도 많지만 ㅋㅋ
여기까지 혹시나 읽어줬다면 고맙다
다 같이 고도로 겜 완성하고 출시하고 성공하자