Skip to content

Indigorilla/AbilitySystemForUnity

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Gameplay Ability System For Unity

Image

Unreal Engine의 Gameplay Ability System을 Unity에 맞게 적용한 시스템 입니다.

Gameplay Ability System은 게임 내 캐릭터가 사용할 액션이나 스킬 등과 사용 결과로 HP 등의 어트리뷰트를 변경하는 게임 이펙트를 만들고 쿨다운 및 MP 같은 자원 소모를 구현하는 등의 작업이 손쉽게 가능합니다.

Unity6 이상 필요

예제 실행 방법 및 요약

실행 방법

  1. 해당 저장소 main branch 전체를 zip 파일로 다운 받거나 clone
  2. 유니티로 해당 프로젝트를 열어 Sample 폴더의 SampleScene.unity 씬 활성화 > 플레이 모드 실행
  3. 마우스 좌 클릭으로 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 기반 데이터가 있는 폴더

시스템 설치 방법

  1. 해당 저장소 main branch 전체를 zip 파일로 다운 받거나 clone
  2. Assets/AbilitySystemForUnity 폴더를 설치를 원하는 프로젝트의 Assets 폴더에 복사

시스템 요약

UML

Image (이미지 클릭 시 확대)

컴포넌트

AbilitySystemComponent.cs: 어빌리티 시스템을 적용 및 관리하는 컴포넌트로 어빌리티, 어트리뷰트, 게임플레이 이펙트, 이벤트 등의 관리 역할. 어빌리티 시스템을 적용 받을 게임 오브젝트는 해당 컴포넌트를 포함 하여야 함.

어빌리티

AbilityBase.cs: 어빌리티의 베이스로 코스트, 쿨다운, 게임플레이 태그 등의 처리와 확장 가능한 메서드가 있음

AbilityDefinition.cs: 어빌리티의 데이터를 관리하는 ScriptableObject 클래스로 코스트, 쿨다운 데이터에 대한 관리를 함

어트리뷰트

AttributeSet.cs: 어트리뷰트에 대한 데이터 및 상태 변경 계산을 가지고 있는 ScriptableObject 클래스

이펙트

GameplayEffect.cs: 게임플레이 이펙트가 AbilitySystemComponent에 적용 될 때 Target, Duration, Level 등의 데이터를 제공 함

GameplayEffectDefinition.cs: 게임플레이 이펙트의 DurationPolicy, Tag 등의 데이터를 관리하는 ScriptableObject 클래스

태그

GameplayTagSO.cs: 게임플레이 이펙트 및 어빌리티에 사용되는 태그의 ScriptableObject 클래스

의존성

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published