이전 개발자 노트:
개요
AutoDefense는 뱀서의 전투 시스템을 기반으로 하는 게임이다.
위 글처럼 여러 스킬을 데이터로 관리하기 위한 전투 시스템을 기획했었다.
과연 어떤 결과물이 나왔을까? 그 결과물은 만족스러웠을까?
그것을 알아보자…
개발 순서
- 스킬 이름과 시너지 이름을 정한다.
- 스킬과 시너지의 효과(메커니즘)을 적었다. (전부는 아니고 50% 정도?)
- DB 구조를 정한다.
- DB 구조에 맞게 프로그래밍을 한다.
DB 개요
모든 DB는 엑셀 파일로 관리했다.
엑셀 파일을 유니티의 ScriptableObject로 사용할 수 있게 하는 패키지가 있다.
DB에는 스킬 정보, 몬스터 정보, 플레이어 정보, 상점 확률 정보 등 다양한 데이터가 있지만 이번에는 전투 관련 데이터 위주로 알아보자.
스킬 데이터
우선 통일성을 위해 플레이어의 스킬과 적의 공격은 똑같은 DB로 관리한다.
플레이어 및 몬스터는 '스킬’의 배열을 들고 있다.
'스킬’에는 시너지 목록, '액션’과 쿨타임이 있다.
쿨타임마다 '액션’을 수행한다.
액션 데이터
'액션’은 크게 투사체 생성과 버프, 두 종류로 나뉜다.
- 투사체 생성은 특정 투사체를 특정 경로로 발사한다.
- 예) A 투사체를 가장 가까운 적을 향해 발사
- 예) B 투사체를 무작위 방향으로 발사
- 버프는 플레이어(모든 스킬) 또는 시너지에 버프를 부여한다.
- 예) 플레이어(모든 스킬)의 공격속도 증가
- 예) 물리학 스킬의 물리 공격력 증가
한 스킬이 두 개 이상의 액션을 수행할 수도 있다.
- 예) 투사체 두 개를 각각 앞과 뒤로 발사하는 스킬
투사체 데이터
모든 공격은 플레이어 또는 몬스터와 투사체가 충돌할 때 계산된다.
투사체에는 공격력, 치명타율, 치명타 대미지 배율, 관통력, 이동 속도, 수명 등의 데이터가 있다.
그리고 '업데이트 시 액션’과 '파괴 시 액션’이 있을 수 있다.
놀랍게도(?), 여기서 말하는 '액션’은 위에서 말한 '액션’과 완전히 같다!
- 파괴 시 액션 예) 폭탄 형태의 스킬은 1차 투사체를 발사하고, 그것이 파괴될 때 크기가 크고 수명이 짧은 2차 투사체를 파괴된 자리에 생성하여 대미지를 주는 방식
- 업데이트 시 액션 예) 장판 형태의 스킬은 크기가 크고 수명이 긴 투사체가 생성되어 1/3초마다 대미지를 주는 방식
후기
스킬 및 시너지 목록
여기 적힌 다양한 스킬을 모두 구현할 수 있었다.
이후 수치 조절은 코드를 수정할 필요 없이 DB 파일을 수정하기만 해도 가능했다.
다만 일부 메커니즘의 경우, 그것을 구현하기 위해 DB만 수정해도 하는 것이 아닌 코드를 건드려서 해당 메커니즘만을 위한 코딩을 하는 경우도 있었다.
- 예) 생물학 스킬로 적을 처치할 때마다 플레이어가 HP를 회복합니다.
- 예) 웨이브 종료 시 추가 골드를 획득합니다.
이런 경우여도 한 번 구현하면 이후 수치 조절은 DB 수정만으로 가능했다.
스킬들이 개수는 많지만 메커니즘 돌려막기 같다는 느낌이 없지 않아 있었다.
그래도 다양한 스킬과 메커니즘을 DB로 관리해 봤다는 점에서 의의를 두자.
만약 더 다양한 메커니즘을 관리해야 한다면…? 모르겠다.