Unreal Engine의 Gameplay Ability System을 Unity에 맞게 적용한 시스템 입니다.
Gameplay Ability System은 게임 내 캐릭터가 사용할 액션이나 스킬 등과 사용 결과로 HP 등의 어트리뷰트를 변경하는 게임 이펙트를 만들고 쿨다운 및 MP 같은 자원 소모를 구현하는 등의 작업이 손쉽게 가능합니다.
Unity6 이상 필요
- 해당 저장소 main branch 전체를 zip 파일로 다운 받거나 clone
- 유니티로 해당 프로젝트를 열어 Sample 폴더의 SampleScene.unity 씬 활성화 > 플레이 모드 실행
- 마우스 좌 클릭으로 Explosion 어빌리티 사용
PlayerController.cs: 플레이어의 어트리뷰트 초기화 및 사용 가능한 어빌리티를 등록하고 플레이어 인풋과 어빌리티를 바인딩
EnemyController.cs: 적의 어티르뷰트 초기화 및 HP 변경이 있을 때 대미지 UI 처리
InitialiseStatsAbility: Player, Enemy의 스텟을 초기화 하는 어빌리티. 게임 시작 시 최초 적용 됨(A_InitStats.asset 참조)
RangeDamageAbility.cs: 예제에 쓰인 범위 공격 어빌리티로 AbilityBase를 확장 하여 구현 됨(A_Explosion.asset 참조) Physics.SphereCast를 통해 정의 된 범위 내의 Enemy에게 대미지 이팩트(GE_Explosion_Damage.asset 참조)를 적용 함
Sample/Data: 예제에 쓰인 어빌리티 및 게임이펙트와 어트리뷰트의 ScriptableObject 기반 데이터가 있는 폴더
- 해당 저장소 main branch 전체를 zip 파일로 다운 받거나 clone
- Assets/AbilitySystemForUnity 폴더를 설치를 원하는 프로젝트의 Assets 폴더에 복사
AbilitySystemComponent.cs: 어빌리티 시스템을 적용 및 관리하는 컴포넌트로 어빌리티, 어트리뷰트, 게임플레이 이펙트, 이벤트 등의 관리 역할. 어빌리티 시스템을 적용 받을 게임 오브젝트는 해당 컴포넌트를 포함 하여야 함.
AbilityBase.cs: 어빌리티의 베이스로 코스트, 쿨다운, 게임플레이 태그 등의 처리와 확장 가능한 메서드가 있음
AbilityDefinition.cs: 어빌리티의 데이터를 관리하는 ScriptableObject 클래스로 코스트, 쿨다운 데이터에 대한 관리를 함
AttributeSet.cs: 어트리뷰트에 대한 데이터 및 상태 변경 계산을 가지고 있는 ScriptableObject 클래스
GameplayEffect.cs: 게임플레이 이펙트가 AbilitySystemComponent에 적용 될 때 Target, Duration, Level 등의 데이터를 제공 함
GameplayEffectDefinition.cs: 게임플레이 이펙트의 DurationPolicy, Tag 등의 데이터를 관리하는 ScriptableObject 클래스
GameplayTagSO.cs: 게임플레이 이펙트 및 어빌리티에 사용되는 태그의 ScriptableObject 클래스

