[LAUNCHER #6] MVP 개발 진행: 아이템 기획 & 상점 시스템

KimGwangmin·5일 전

[프로젝트] GamBall

목록 보기
7/14

개발 현황

아이템 기획

등급(희귀도) 시스템

  • Common, Rare, Epic, Legendary 네 단계로 구분했다.
  • enum으로 구현하지 않고, 각각을 추상 SO 클래스 ItemRarity의 구현체로 만들었다. 추후 등급 체계를 수정할 가능성을 고려한 방식이다. (enum은 중간에 단계를 추가하거나 빼면, 기존 아이템들의 등급 설정을 다시 검토해야 한다.)

페그(핀)

  • 스크립트나 변수명으로는 Pin을 사용하는데, 인게임 용어는 핀으로 할지 페그로 할지 미정이다. 페그가 2음절이라 좀 더 어감은 좋은 것 같다.
  • 컨셉이 파칭코라, 페그 말고도 그쪽 용어를 좀 찾아봐야겠다.
  • 원본은 여기에 두고 계속 목록을 추가할 예정이다.
  • 아직은 개수가 적어 별도의 관리 도구를 두지 않았고, 기획 완료 후 밸런스 조절 단계에서 데이터 관리 도구를 추가할 계획이다.
NameRarityPriceScoreHealthResettableComment
BasicPinCommon011TRUE기본 핀. 상점에 등장하지 않음. 아무 것도 없는 칸은 항상 기본 핀이고, 아래의 모든 특수 핀들은 기본 핀이 있는 자리에 갈아 낄 수 있다.
ResetPinEpic711TRUE충돌 시 다른 모든 핀을 재활성화
BetterPinRare2101TRUE
GlassPinRare5301TRUE충돌 시 5% 확률로 영구 파괴
ReplicaPinLegendary911TRUE충돌 시 대상 공의 복제본 1개 생성. 복제본은 핀 기준 y축 대칭으로 튀어나간다.
ChipPinRare551TRUE충돌 시 칩 1개 획득
MagnetPinRare5101TRUE활성화 상태일 때, 범위 내의 공을 끌어당김
BlackholePinEpic611TRUE직접 충돌 시에만 발동. 공을 보드 최상단 랜덤한 위치로 순간 이동
LightningPinEpic7101TRUE충돌 시 주변 활성화 된 핀에 연쇄 번개 충격

공

  • 원본은 여기에 두고 계속 목록을 추가할 예정이다.
  • 아직 가격을 못정했다. 어느 정도 MVP 구현이 되고 나서 조정할 요소인듯.
NameRarityScoreDamageMassElasticityRadiusComment
BasicBallCommon11110.15기본 공
BouncyBallRare11120.15아주 잘 튕김
PingPongBallCommon110.81.20.12작고, 가볍고, 잘 튕김
BasketBallEpic1111.50.2활성화된 두 핀 사이로 떨어지면 보너스 점수
BowlingBallRare2120.80.2크고, 무겁고, 덜 튕김
RugbyBallRare21110.15럭비공 모양 전용 콜라이더
GlassBallRare51110.15충돌 시 1% 확률로 영구 파괴
TimeBombBallRare5111.60.15발사 후 9초 뒤 폭발. 폭발 시 이번 발사 점수가 절반으로 감소
GhostBallEpic510.120.25핀과 충돌 없이 통과함. 벽과 낙하 구역 칸막이와는 정상적으로 충돌.
MatryoshkaBallLegendary11110.15충돌 시 공 두 개로 분열. (최대 3번, 즉 최대 8개까지 분열)
DiceBallEpic1~61110.15매 충돌 시 1~6 중 랜덤으로 점수가 선택됨

페그 외형 설정

  • 페그의 종류별로 전용 외형을 가질 수 있도록 했다. 프리팹으로 할당하며, 여기에 핀의 외형과 충돌체 크기가 정의된다. (PinView라는 컴포넌트를 가져야 한다)
  • 현재는 전부 BasicPin을 프리팹으로 지정하고, 색상만 변경했다.
    • 나중에 아트 에셋이 적용될 경우 모든 핀이 개별 프리팹을 가지게 될 예정이다. 이 시점에는 색상 설정은 제거를 고려할 수 있다. (어차피 스프라이트의 색을 그대로 보여주려면 백색으로 고정해야 한다)
  • PinShapeValidator에서 페그가 서로 겹치지 않도록, 충돌체 크기를 검사한다.
    • 콜라이더의 모든 꼭짓점이 주변 페그들과 이은 선분의 수직이등분선들로 감싸이는 영역 내부 안에만 위치하도록 한다.
    • 필수 요건은 아니고, 에디터 상에서 경고해주는 역할만 한다. 공과 충돌하여 체력이 소진된 페그는 비활성화 되기 때문에, 공이 지나갈 통로가 영원히 막히는 문제는 발생하지 않는다.
BasicPin의 경우페그의 크기를 키웠을 때

공과 페그 특수 능력

  • 특수 능력이 작용하는 범위와 방식이 다양하기 때문에, 하나의 구조 아래에 구현되지 않고 능력에 필요한 부분을 건드리는 모듈들이 만들어졌다.
  • 충돌 종류를 나눴다. 공과 직접 충돌하는 경우와, 다른 페그 능력에 의해 타격하는 경우. PinHitContext에 담기는 정보 중 하나이다.
  • 복제 페그나 블랙홀 페그는 공을 대상으로 능력이 발동하므로 직접 충돌 시에만 발동한다.

공 관련

  • 공의 능력을 정의하기 위한 추상 SO 클래스 BallAbility를 두었다.
  • 현재는 발동 지점이 네 가지이다. 추후 공 능력 기획에 따라 더 추가될 수도 있다.
    • 공이 핀과 충돌하고, 페그에서는 충돌 로직이 발동하기 이전 (OnScoring)
      • 주사위 공에 쓰인다. 매번 1~6 사이의 랜덤 값을 점수로 갖는데, 이는 충돌 로직 이전에 미리 계산해야 한다. 이름이 OnScoring인 이유이다. 공의 점수를 확정짓는 지점.
    • 공이 핀과 충돌하고, 페그의 능력이 발동한 이후 (OnHit)
      • 유리 공과 마트료시카 공에 쓰인다. 파괴·분열 이전에 페그의 능력을 먼저 받도록 하기 위함이다. 일반적인 충돌 시 효과에 사용될 예정이다.
    • 공이 날아가는 동안 매 물리 프레임 (OnTick)
      • 시한폭탄 공에 쓰인다. 시간을 재야 할 때 쓰인다.
    • 공이 같은 행의 이웃한 두 활성화 페그 사이를 통과할 때 (OnGapPassed)
      • 농구공에 쓰인다. 사실, 농구공만을 위한 발동 지점이고, 다른 곳에 쓸 데가 있을지는 아직 모르겠다.

페그 관련

  • 페그 능력을 정의하기 위한 추상 SO 클래스 PinAbility를 두었다.
  • 발동 지점은 하나이다: 충돌 시 (OnHit)
    • 직접 충돌인지 연쇄 충돌인지는 PinHitContext가 알려준다.
  • 페그 능력의 무한 연쇄를 막기 위해, 능력이 발동 중인 페그는 다른 능력의 대상이 되지 않도록 한다. 피격 시 능력 발동 뒤에 체력이 감소하기 때문에, 이 장치가 없다면 연쇄 깊이가 끝없이 깊어질 수 있다.
  • 위 장치만으로 해결되지 않는 변수를 막기 위해 연쇄 깊이를 100으로 제한하며 위반 시 경고를 남기도록 했다. 리셋 페그 등과 연계되면 예측하지 못한 상황이 벌어질 수 있기 때문이다.
  • 자석 페그 등 지속적 물리 효과는 능력으로 정의하지 않고 PinView 프리팹 아래에 별도 물리 모듈을 두었다. (충돌 시 발동하는 효과가 아니고, 인력 효과 정도는 PointEffector2D라는 유니티 컴포넌트를 그대로 쓸 수 있다.)

내일 계획

1. 물리 다듬기

  • 페그 충돌 시 반발력 개념 도입. 이는 특수 능력이 아니라 모든 페그가 갖는 성질
  • 기존 물리 탄성과의 조화를 잘 고려해야 함
  • 속도 제어 vs 힘 작용
  • 최대 속력값이 곧 폭주 제어 장치. 현재는 전역 설정인데, 공마다 다르게 할지 고려(가볍고 탄성이 큰 공은 더 빠른 속도까지 허용)
  • 반발력이 큰 범퍼 페그 같은 걸 추가해볼 수 있음

2. 상점 페이즈 마무리

  • 구매한 페그를 보드에서 드래그 & 드롭 조작으로 배치 수정
  • 아이템 설명 툴팁 UI
  • 공, 페그 판매 (구매가의 절반, 최소 판매가 1칩)

3. 아트 스타일 구체화

  • 전체적인 분위기, 스타일 레퍼런스 잡아보기
    • 기계의 모습이나 전반적인 분위기는 파칭코를 참고할듯
  • 에셋을 생성할지, 구매할지 고민해보기
  • 생성 워크플로우 알아보기
    • Aseprite MCP
  • UI 레이아웃 구상
    • 스테이지
    • 상점

4. 기획 요소 보강

  • 스테이지 진행 방식 (선형 진행 vs 슬더스 지도 스타일)
  • 이벤트 방 기획
  • 티켓 아이템 기획
  • 보스 디버프 기획
  • 발사기 조작 방식 변경 (조준은 실시간 마우스 방향으로)

0개의 댓글