오랜만이야. 귀찮아서 일지 안쓰고있었는데 개발이 하기 싫어서 일지를 쓰게되네 ㅋㅋㅋㅋ
이번엔 고급 적 스포너 개발을 해봤어. 명색이 Horde 스타일의 게임인데 웨이브 시스템이 깊이가 좀 있어야겠더라고
Horde 요소가 있는 대표적인 게임으로는 콜옵 좀비, 레포데, 킬링플로어 등이 있어
이 게임들의 적 스포너들은 곳곳에 (플레이어 생각보다 훨씬 많이) 배치되어 있고 원할한 플레이 경험을 위해 너무 멀리서도 너무 가까이서도 스폰되지 않게 설정이 되어있어. 만약에 가까이서 스폰한다고 하면 플레이어가 안보는 지역에서 스폰이 되지. 그리고 너무 한 곳에서만 스폰되면 이상하기에 스폰 쿨타임이 존재해.
그리고 적이 동시에 움직일 수 있는 최대 숫자라던지, 웨이브 예산, 페이스 제어 등 생각보다 되게 복잡하게 구현이되어 있어. 그래서 최대한 따라해보도록 노력했어.
지금 보여준 사진은 킬링플로어의 웨이브별 적 스쿼드 타입이야. 이 스쿼드 데이터테이블을 기반으로 스폰되는 적들이 조절이 돼. 적의 갯수가 여러개인 내 입장에서도 콜옵이나 레포데보다는 킬링플로어가 낫겠다 싶어서 이걸 택했어.
먼저 스폰할 적 타입 데이터를 선언해주고. 웨이브 밸런스를 위해 스탯 Multiplier랑 커브를 만들어줬어. 아직 밸런스를 못정해서 커브는 등록 안해놨어.
티어로 강력함을 구분하고 웨이브마다 스폰가능한 티어를 제한했어. 코스트는 아마 안쓸거 같긴한데 나중에 오버밸런스 적이 생긴다면 스폰 코스트를 증가시켜 해결하는 방법도 열어뒀어.
웨이브 관리 데이터에선 한번에 몇마리 스폰할지 정해주고 확률은 어느정도인지 어느 스포너 그룹에서 스폰할지 정해줘.
Budget은 웨이브 당 총 몇마리 스폰할지. AliveCap은 동시에 움직일 수 있는 (너무 많으면 더이상 스폰X) 적 갯수 설정하는 커브. MaxTier는 웨이브에 몇티어짜리 유닛까지만 나올지 설정하는 커브.
빠르게 밸런스 조절하기 위해 "딸깍"으로 끝낼 수 있도록 노력했어.
실제 스탯 적용은 Enemy가 스폰할 때 인터페이스를 통해 전달하도록 구현했고
스포너에서 스폰가능 체크하는건 간단하게 라인트레이스 쏘는걸로 구현했어
이건 어디 스포너에서 스폰할지 점수비교 해주는 로직이야 실제 스폰할 때 갖다 쓰면돼
결과
코드 다 보여주고 싶은데 좀 길어서 그건 무리일거 같고 어차피 지피티가 짜준거 그대로 복붙한거라 별로 의미없을듯
지피티가 5되고나서 뭔가 설계만 잘해주면 오류를 덜뱉는 느낌이라 좀 편하더라
물론 검수는 꼼꼼히 하긴하지만
고럼 안녕
댓글 2