게임 개발 공부 기록

68일차 - Abyss_Slayer 최종 팀 프로젝트 17 (중간 정리 2)

00lwt 2025. 4. 29. 21:04

▶▷ 스킬 구조

스킬의 구조는 SO(ScriptableObject) 및 상속 관계를 이용하여 관리

각 스킬에 공통적으로 있어야 하는 필드를 포함하고 있는 Skill을 상속 받아

근접, 범위, 투사체 등 공격 형태의 스킬, 일정 시간 지속되는 버프 형태의 스킬 등으로 카테고리가 나누어진다.

나누어진 스킬 카테고리를 상속 받는 스크립트들은 실제로 생성될 ScriptableObject이다.

투사체 스킬 중에서도 일직선으로 발사하는 형태와 적을 추적해서 날아가는 형태가 있듯 같은 카테고리 아래 다양한 형태로 나누어진다. (중간 이후에 탱커, 힐러 스킬 추가 예정)

★★ 이러한 방식을 채택한 이유 :

  1. 스킬의 가지 수가 많지 않아 CSV나 JSON 대신 SO를 사용해도 데이터 관리에 어려움이 적을 것이라 판단하여 직관성을 우선으로 둠
  2. 에디터 상에서 스킬 대부분의 정보를 확인하고 수정이 가능하여 스킬 로직을 모르는 다른 팀원이 확인하고 수치 조정도 편하기 때문에 협업의 관점에서도 이득이라고 생각함
  3. 상속을 통해 공통되는 정보들은 부모 클래스로 묶어 구조를 간략화 할 수 있음

각 스킬에 대응하는 정보들을 확인할 수 있는 스킬 SO 인스펙터 예시 이미지
ex) 아처 X 스킬

 

▶▷ 아처 스킬

아처 투사체 로직

투사체 스킬을 사용할 경우 Init을 통해 매개변수에 맞는 오브젝트를 풀에서 꺼내오는 형식

 

X (기본 공격)

화살을 1회 발사하는 공격

플레이어와 화살이 겹치면 안되기 때문에 플레이어로부터 살짝 떨어진 곳으로 화살의 생성 위치 지정


A (강화 공격)

2배의 데미지를 입히는 화살을 발사하는 공격 (기본 공격과 로직 동일)

 

S (연발 공격)

일정 시간 동안 많은 화살을 빠르게 발사하는 공격

코루틴 내부에서 WaitForSeconds를 통해 각 발사 사이의 딜레이를 적용하고 for문으로 설정한 화살의 수 만큼 반복 생성 및 발사 구현 (딜레이 및 화살 수는 이후에 추가할 스킬 업그레이드에서 변화 예정)

화살이 생성되는 위치가 계속 일정하면 부자연스럽기 때문에 생성 위치를 일정 범위 내에서 랜덤으로 지정

D (버프)

일정 시간 동안 투사체의 개수가 2배가 되는 버프

버프 스킬을 사용하면 플레이어의 SetBuff 메서드를 호출

SetBuff 메서드는 매개변수로 버프 스킬을 전달 받아 버프의 현재 지속 시간을 최대 지속 시간으로 초기화 한 다음 버프 적용 여부를 true로 설정
버프 지속 시간은 사용된 버프의 타입에 따라 정해