1. 왕국의 재정을 바로잡다: 유령 인구 문제 해결과 그 파장 👑
가장 시급했던 문제는, 백성이 죽어도 수입이 줄지 않던 '유령 인구' 버그였습니다. 이는 게임의 밸런스를 완전히 무너뜨리고 있었기에, 저는 GameManager의 재정 시스템을 전면 개편하기로 결정했습니다.
개혁: 누적 합산에서 실시간 인구 조사로
기존 GameManager는 기술 업그레이드가 있을 때마다 periodLinear(초당 수입)과 같은 변수에 생산량을 누적하여 더하고(+=) 있었습니다. 이 '누적 총합' 값은 다른 여러 시스템에서 참조하는 중요한 지표였습니다.
저는 이 '누적' 방식이 문제의 근원이라 판단하고, 시스템을 아래와 같이 변경했습니다.
- '1인당 생산량' 개념 도입: GameManager의 장부는 이제 '누적 총합'이 아닌, 각 지역별 **'백성 1인당 기본 생산량'**을 기록합니다.
- 실시간 재계산: 수입을 계산할 때마다 PeopleManager에게 현재 인구수를 직접 물어본 뒤, '1인당 생산량'과 곱하여 총수입을 실시간으로 계산합니다.
이 개혁으로 '유령 인구' 버그는 완벽하게 해결되었습니다. 하지만 저는 제 승리에 도취한 나머지, 이 변경이 왕국 전체에 미칠 파장을 미처 생각하지 못했습니다.
예상치 못한 파장: 무너진 동료의 시스템
잠시 후, 다른 기능을 개발하던 동료가 다급하게 저를 찾았습니다. 그의 시스템이 완전히 멈춰버렸다는 것이었습니다.
원인은 명확했습니다. 동료의 코드는 GameManager에 기록된 '누적 총합' 값을 참조하여 "현재 왕국의 총생산력이 이 정도이니, 다음 업그레이드 비용은 이만큼으로 책정해야겠다"와 같은 계산을 하고 있었습니다.
하지만 저의 개혁으로 인해, GameManager의 장부에는 더 이상 '누적 총합'이라는 개념이 존재하지 않게 되었습니다. 그 자리는 훨씬 작은 '1인당 생산량' 값으로 대체되었고, 동료의 코드는 완전히 잘못된 값을 참조하여 계산 오류를 일으킨 것입니다.
저는 버그를 잡는 데 성공했지만, 그 과정에서 다른 개발자와의 '약속'을 깨뜨리고 말았습니다.
이 경험을 통해 저는 GameManager와 같은 중앙 시스템을 수정할 때의 막중한 책임을 뼈저리게 깨달았습니다. public으로 공개된 변수와 함수는 단순히 기능적인 것을 넘어, 다른 시스템과의 **'공개된 약속(Public API)'**이라는 것을 말입니다.
단순히 버그를 수정하는 것을 넘어, 이 변경이 다른 시스템에 어떤 영향을 미칠지 미리 파악하고, 동료와 충분히 소통하여 함께 해결책을 찾는 과정이 반드시 필요했습니다. 이 값비싼 교훈을 통해, 저는 더 나은 협업 개발자로 성장하는 중요한 첫걸음을 뗄 수 있었습니다.
2. '손맛'을 더하다: 채찍질에 반응하는 세계
클리커 게임의 핵심은 '클릭'이라는 단순한 행위에 얼마나 만족스러운 피드백을 주느냐에 달려있습니다. 이전에는 버튼의 색이 바뀌는 것이 전부였죠. 오늘, 저는 이 '채찍질'에 세계가 반응하도록 만들었습니다.
구현: 이벤트 기반의 화면 효과
'때렸다!'는 사건을 알리는 OnButtonClicked 라는 VoidEventChannelSO를 만들었습니다.
- 방송국 (ButtonImageChanger.cs): 채찍질 버튼이 클릭되면, OnButtonClicked 채널에 방송을 송출합니다.
- 구독자 1 (ImageShaker.cs): 이 방송을 구독하고 있다가, 신호가 오면 자신이 붙어있는 건물 이미지를 흔듭니다.
- 구독자 2 (ImageShaker.cs): 똑같은 방송을 구독하고 있다가, 신호가 오면 같이 있던 광부들도 같이 흔들리게 했습니다.
이 이벤트 기반 아키텍처 덕분에, '버튼'은 자신이 어떤 효과를 일으키는지 전혀 알 필요가 없습니다. 나중에 "채찍질할 때 소리도 나게 해줘!" 라는 요청이 오면, 그저 소리를 재생하는 새로운 '구독자' 스크립트만 만들어 OnButtonClicked 채널을 구독하게 하면 그만입니다. 이 유연함이야말로 이 아키텍처의 가장 큰 매력입니다.
3. 삶과 죽음의 질서 확립
초기 버전에서는 백성들이 죽지 않거나, 죽더라도 유골이 영원히 남아 맵을 어지럽혔습니다.
- 죽음의 섭리: SurvivalProfile에 기록된 나이별 생존 확률을 AgeingSystem이 참조하여, 백성들이 자연사하도록 수정했습니다. 확률을 대폭 감소시켜 왕국이 너무 빨리 멸망하는 것도 막았습니다.
- 자연으로의 회귀: DraggableSkull 스크립트에 '자연 소멸' 코루틴을 추가했습니다. 이제 유골은 일정 시간이 지나면 사라지지만, 플레이어가 정보창의 '보존하기' 토글을 체크하면 영원히 남길 수 있는 선택지를 제공했습니다. 이는 게임의 성능과 플레이어의 감성적 만족을 모두 고려한 결정이었습니다.
오늘의 성찰과 내일의 계획
오늘 하루는 '재미있는 시스템은 견고한 기반 위에서만 꽃을 피울 수 있다'는 평범하지만 뼈아픈 진리를 다시 한번 되새기는 시간이었습니다. 버그가 들끓는 경제 시스템 위에서는 그 어떤 화려한 기능도 사상누각일 뿐이었습니다.
이제 왕국의 근간이 바로 섰으니, 내일이야말로 어제 미뤄두었던 '본질적인 재미'를 구체화하는 실험을 시작할 때입니다. 그 중심에는 새롭게 도입한 '권위(Authority)' 시스템의 대대적인 강화가 있을 것입니다. 플레이어의 클릭 하나하나가 왕국에 어떤 영향을 미치는지, 그 권능을 시각적으로, 그리고 보상으로 직접 체감하게 만드는 것이 목표입니다.
내일의 계획: '권위' 시스템에 생명을 불어넣다
- 시각적 피드백 강화: 불타는 금광 🔥 플레이어가 열심히 클릭하여 '권위 게이지'가 차오를수록, 금광 건물이 점차 붉게 달아오르며 불타는 듯한 시각적 효과를 추가할 것입니다. 이는 플레이어의 노력이 왕국의 생산력에 직접적인 영향을 미치고 있음을 직관적으로 보여주는 강력한 피드백이 될 것입니다.
- 게임플레이 피드백: 가속하는 백성들 🏃 권위는 단순한 숫자 배율을 넘어, 왕국 전체의 활기를 상징해야 합니다. 권위 수치가 높아질수록, 일하는 백성들의 애니메이션 속도가 함께 빨라지도록 만들 것입니다. 이를 통해 플레이어는 자신의 클릭이 백성들을 독려하여 왕국 전체의 작업 효율을 높이고 있다는 시각적 만족감을 얻게 될 것입니다.
- 궁극의 보상: 피버 타임(Fever Time)! ✨ 권위 게이지가 마침내 최대치에 도달하면, 모든 것이 폭발하는 **'피버 타임'**이 발동됩니다. 이 시간 동안에는:
- 더 높은 골드 배율이 적용됩니다.
- 크리티컬 확률이 대폭 상승하거나 **100%**가 되어, 클릭 한 번 한 번이 엄청난 보상으로 돌아오는 짜릿한 경험을 선사할 것입니다. 이는 플레이어에게 권위 게이지를 끝까지 채워야 하는 강력한 동기를 부여할 것입니다.
견고해진 시스템 위에서, 이제는 플레이어의 행동이 단순한 숫자 증가를 넘어 세계에 직접적인 영향을 미치고, 그 결과가 짜릿한 보상으로 돌아오는 '재미의 순환'을 설계하는 데 온전히 집중하려 합니다. 내일의 개발 일지도 기대해 주십시오.