어빌리티 시스템은 캐릭터의 기술, 능력치, 디버프 같은 것들을 유연하고 쉽게 구현해주는 프레임워크를 지원해준다.
또한 멀티플레이도 가능하게 해주며 멀티플레이에서 복잡한 시스템을 효율적으로 처리도 해준다.
어빌리티 시스템은 Gameplay Ability, Gameplay Tag, Attributes, Gameplay Effects 로 주를 이루게 된다.
Gameplay Ability 는 게임 내 어빌리티가 하는 일에 대해 알 수 있다.
언제 어떤 상황 에서 사용할 수 있는지 정의하며 게임내에 상호작용에 따른 작업을 실행 할 수 있다.
예로 쿨다운(재사용 대기시간) 및 시전 비용, 플레이어 입력, 애님 몽타주가 있는 애니메이션, 어빌리티 자체를 액터에 부여할 때의 반응도 구현할 수 있다.
Gameplay Tag 는 어빌리티의 상호작용 방식에 결정을 한다.
어빌리티의 작동방식에 따라 일정한 태그를 통해 식별하여 사용한다.
Attributes 는 캐릭터의 능력치를 가질 수 있다.
캐릭터의 공격력, 체력, 공격 속도, 점프 높이 등등 이를 가질 수 있으며 Gameplay Effects 를 통해 즉시 또는 일정 시간 동안 게임플레이에 능력치를 변경할 수 있다.
GameplayEffects 는 Attributes 를 변경하기 위한 방편이다.
다양한 이펙트를 통해 체력을 영구적으로 증가시킨다 던지 공격 속도를 일시적으로 증가시켜준다던지
캐릭터의 상호작용을 통해 능력치를 변경할 수 있다.
제일 먼저 플러그인을 설정 해주어야 한다.
메뉴에서 편집 - > 플러그인 들어간 후 검색을 통해 Gameplay Abilites를 체크하고 재시작을 해준다.
어빌리티 시스템을 사용하기 위한 필요한 클래스들을 만들어준다.
AbilitySystemComponent, AttributeSet, GameplayAbility 이 3개를 만들어준다.
그리고 c++에서 사용할 수 있게 모듈 또한 추가해 준다.
지금 만들고자 하는게임은 싱글게임이지만 멀티플레이를 염두해 두고 만들면 좋을것 같아서 멀티플레이기반으로 만들어 볼려 한다. 포폴 및 게임은 혼자 공부할려고 만드는것 이기에 자세한 설명이나 이전 단계없이 진행을 하게 될것이다.
저는 일단 어빌리티 관련된건 PlayerState에서 관리해 줄려고 합니다. 일반적으로 PlayerState는 클라이언트의 정보를 관리 해주기도 하며 멀티플레이를 염두하여 공부하기 위해 PlayerState로 한다.
PlayerState클래스를 만들어주고 만들었던 게임모드에서 PlayerState를 설정 해준다.
PlayerState클래스에서 AbilitySystemComponent와 AttributeSet를 세팅해준다.
그다음 캐릭터베이스 클래스에서도 어빌리티 시스템을 세팅해준다.
이제 베이스를 상속받는 주인공캐릭터에 어빌리티 시스템을 세팅해준다.
지금 까지의 흐름은 게임시작시 PlayerState가 먼저 호출이 되어서 AbilitySystemComponent와 Attribute를 만들어주고
캐릭터에서 PossessedBy를 통해 PlayerState가져와 캐스팅 후 AbilitySystemComponent와 Attribute를 가져와 캐릭터에서도 사용 할수 있게 만들어 준다.
이제 Atrribute를 설정해 준다.
캐릭터의 능력치는 FGameplayAttributeData로 관리를 하며 UPROPERTY에서 OnRep_XXX를 통해 콜백함수를 등록시켜준다.
그리고 GetLifetimeReplicatedProps함수를 통해 복제된 변수를 등록하고 이 등록된 변수의 상태를 바꿀수 있다.
이는 REPNOTIFY_Always, REPNOTIFY_OnChanged 둘중 하나를 택하면 되며 저는 Always 항상이를 복제하게 설정했습니다.
컴파일 후 콘솔창에 showdebug abilitysystem을 쳐보면 적용된 어트리뷰트나 게임어빌리티 시스템에 관한 정보를 볼 수 있다.
'언리얼 > 개발일지' 카테고리의 다른 글
언리얼5 공부 및 개발일지 5일차 어빌리티 시스템 향상된 입력 (0) | 2023.09.26 |
---|---|
언리얼5 공부 및 개발일지 4일차 어빌리티 시스템 UI (0) | 2023.09.23 |
언리얼5 공부 및 개발일지 2일차 캐릭터 애니메이션 추가 (0) | 2023.09.21 |
언리얼5 공부 및 개발일지 1일차 캐릭터 이동 및 회전 구현 (0) | 2023.09.20 |
언리얼5 개발일지 BloodVengeance (0) | 2023.09.20 |