언리얼엔진/언리얼 C++

GameAbilitySystem 이론과 초기 세팅

season97 2024. 10. 29. 18:32

 개인적인 공부를 위해 포스팅 하는 글입니다.


공식 문서 : https://dev.epicgames.com/documentation/en-us/unreal-engine/gameplay-ability-system-for-unreal-engine?application_version=5.3



# 왜 필요할가?

ㆍ 아이템, 스킬.. 등등 없는게임을 찾기 힘들다. 

ㆍ 예를들어 롤같은 게임을 보자. 챔피언이 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