※ 개인적인 공부를 위해 포스팅 하는 글입니다.
# 왜 필요할가?
ㆍ 아이템, 스킬.. 등등 없는게임을 찾기 힘들다.
ㆍ 예를들어 롤같은 게임을 보자. 챔피언이 160개가 넘는데 스킬을 최소5개씩 가지고있다... 이런거를 관리해주기 어렵다..
ㆍ 또한 이런 상태도 예를 한번 보자.
적1명이 독데미지 디버프와, 점화를 걸었다. 또다른 적 1명이 점화를 걸었다.
피해를 받은 사람은 15초간 회복되는 물약을 3개를 먹었다.
→ 이런걸 어떻게 처리할 수 있을까? 데이터로 관리해주고 코드로 하나하나 하드코딩하면 관리하기가 굉장히 어려워질 것 같다.
# 그래서 언리얼에서 제공하는 스킬 시스템이 GameAbilitySystem 이다.
ㆍ 또한 언리얼의 데디케이트 서버와도 호환이 굉장히 잘된다.
ㆍ 스킬 자체를 이 Gameplay Ability로 구현을 하면, 아래 3가지 유틸 기능을 사용하기 편리하다.
1.Attribute
2.Effet
3.Tag
4.Abillty를 기억하자
# Tag
이전 포스팅에 GamePlayTag를 다룬적이 있었다. 얘는 id? enum? 같은 느낌으로 사용하면 됐었다.
ㆍ Skill.Attack.FireBall 이런식으로 계층 구조를 만들어 관리해 줄 수 있게 해주는 놈이였다.
→ 얘도 게임 플레이 어빌리티 시스템중 하나
예를들어 CC.Hard.Airbon 야스오의 궁극기를 보자. 에어본에 걸린 적에게만 궁극기를 쓸 수 있다. 태그로 처리하려면 에어본 태그(디버프) 를 가진 적들에게만 사용이 가능하게 처리하기
또한 케일을 예를 보면 버프.무적.걸어주기. 등 이런식으로 다양한 기능을 관리할 수 있게 해주는게 Tag기능이였다.
# 능력치를 다루고 싶다.. Attribute
Attribute 라는게 있는데 이를 이용해 능력치를 관리한다.
ㆍ 요즘 게임들 스텟 엄청 많은데...
ㆍ 버프를 받는것에 대한 처리, 디버프에 대한 처리 등등 유틸을 다 지원해준다.
# 데미지 효과같은걸 처리하고 싶다. GamePlayEffect
이런 데미지 주는걸 GamePlayEffect라고 부른다
단발성효과, 도트데미지 등등 옵션같은것이 다 정의되어 있어 사용하기만 하면 된다.
※ 말로만 쓱 듣고 가슴으로는 받아들여 지는데 초기 세팅을 보자
1. 플러그인 추가
2. 상속을 받는 클래스 생성 가능 + 모듈3개 추가해줘야 함
ㆍ Player쪽에서 스테이트를 처리해줘도 상관은 없겠다. 하지만 온라인게임을 만든다면 여기서 처리해주는 편이 깔끔하겠다. 또한 GameAbilitySystem도 이 PlayerState클래스와 호환이 잘 되므로 사용해보자
ㆍ AbilitySystemComponent는 스킬에 대한 코드를 관리해 주는 매니저 라고 생각하면 된다.
ㆍ 꼭 Player의 스킬만 관리해 주는건 아니다. 버프, 디버프는 몬스터도 플레이어한테 걸수도 있다.
ㆍ 지금 실습하고있는 프로젝트의 경우엔 스킬을 쓰는 대상은 Charecter 클래스겠다. 몬스터, 플레이어의 상위
ㆍ 인터페이스도 하나 받아와야 한다.
ㆍ 캐릭터 클래스에서 어빌리티 시스템 컴포넌트 추가. (스킬매니저 추가한 느낌)
get함수와 초기화 함수인데 구체적인 구현은 몬스터와 플레이어를 다르게 해줄 예정이다.
-> Player의 경우 PlayerState를 통해 따로 관리하고 있고, 몬스터는 그냥 몬스터에서 관리하기 때문에 이런 구조가 탄생
#몬스터 클래스
ㆍ 본인 클래스에서 관리해주고 있기 때문에 this, this
# PlayerState와 Player 클래스
ㆍ 뭐 코드는 별거 없고 그냥 어빌리티 시스템을 연결해주는 과정이다.
# 플레이어와 플레이어스테이트는 언리얼 상속구조에 의해 자동으로 연동 됨, 하지만 AbilitySystem에 대한 초기화는 직접 해줘야 한다.
# 결과 화면
ㆍ' ~ ' 키를 누르면 입력할 수 있는 칸이 열리는데 저기에 ShowDebug abilitysystem 을 입력했을때 이렇게 뜨면, 세팅이 완료된 것
ㆍ 현재는 아무 기능이 없기에 이렇게 확인해야 한다.
# GAS이론과 관련된 도움이 될만한 사이트
https://github.com/tranek/GASDocumentation
'언리얼엔진 > 언리얼 C++' 카테고리의 다른 글
GameplayAbilitySystem - Effect (0) | 2024.10.30 |
---|---|
GameplayAbilitySystem - Attribute (0) | 2024.10.30 |
Inventory - 아이템 DragAndDrop (0) | 2024.10.29 |
Inventory - 아이템창에 아이템 구성해보기 (1) | 2024.10.27 |
SubSystem - 아이템 매니저 (3) | 2024.10.27 |