UNREAL · 게임 시스템
몬스터 드랍 테이블 설계
등급별로 다른 드랍을, 아이템과 재화를 함께, 확률로 굴리는 드랍 시스템을 만들었다. 구조는 단순했지만 ‘재화’와 ‘보스’ 두 군데서 함정을 밟았다.
독립 굴림 DropComponent
드랍은 DropComponent가 테이블의 항목마다 독립적으로 확률을 굴리는 방식으로 짰다. ‘하나 나오면 끝’이 아니라 각 항목이 자기 확률로 나오거나 안 나온다. 이렇게 두면 등급·몬스터별 드랍을 테이블 행으로만 확장할 수 있다.
함정 1 — 재화 드랍
아이템 지급 함수(AddItem)가 재화(Currency)를 지원하지 않았다. 그래서 드랍 결과가 재화면 조용히 버려졌다.DropComponent에서 항목 종류를 보고 재화면 AddCurrency로, 아이템이면 AddItem으로 분기하게 해서 둘 다 정상 지급되게 했다.
함정 2 — 보스 드랍은 페이즈 행이 아니라 베이스 행에
보스는 페이즈별로 데이터 행이 나뉘어 있었는데, 드랍을 페이즈 행에 넣었더니 페이즈 전환 때 데이터가재init되지 않아 드랍이 중복되거나 누락됐다. 드랍처럼 ‘한 번만 확정돼야 하는’ 영속 데이터는 페이즈에 따라 바뀌지 않는 베이스 행에 둬야 한다. 덧붙여, DT_WeaponData가 레지스트리에 인덱스되지 않으면 참조가 비니 등록도 확인해야 한다.
배운 점
‘항목별 독립 굴림’과 ‘테이블 한 줄 = 한 레코드’를 지키면 드랍 확장이 데이터 작업으로 끝난다.
보스처럼 상태(페이즈)가 바뀌는 액터는 데이터가 어느 시점에 init되는지 확인하고, 재init되지 않는 베이스에 영속 데이터를 둔다. 지급 함수가 특정 타입만 지원하는지도 미리 확인해야 조용히 버려지는 결과가 없다.