SlideShare a Scribd company logo
DevRookie
Gameplay
Ability
System
2023.02.04
By TonyChoiMS
Remind
GameplayTags
GameplayTag Container
GameplayTag Manager
GameplayTag Delegate
GameplayAbility
Index
01
02
03
04
05
06
- GameplayAbilityComponent 초기 세팅 방법
- Gamplay Ability란 무엇인가?
- Gamplay Effect란 무엇인가?
- AttributeSet이란 무엇인가?
이전 시간에 진행한 내용
01
4
GameplayTags
Hierarchical name
- /Engine/Source/Runtime/GameplayTags/Classes/GameplayTagContainer.h
- GameplayTagManager에 등록되어 있는 계층 구조를 갖는 이름
- 오브젝트의 상태를 분류하고, 설명하는 데 유용하게 사용되는 구조체
- 오브젝트가 어떤 태그를 들고 있는지, 없는지에 따라 현재 상태를 나
타낼 수 있음. (ex. Stun)
Gameplay Tags
01
4
- 새 게임플레이 태그 추가하면 계층 구조로 생성됨.
- 태그를 비교 또는 확인 하는 함수에서 유용하게 사용
- 기존 bool이나 enum으로 상태를 정의하던 것을 GameplayTags로 대
체
- 태그는 AbilitySystemComponent에 부여하는 것이 일반적
- IGameplayTagAssetInterface 구현을 통해 엑세스
Gameplay Tags
01
4
- DefaultGameplayTags.ini에 정의
- Project Setting -> Project -> GameplayTags
- Create
- Rename
- Search for Reference
- Delete
Gameplay Tags
01
4
Gameplay Tags
01
4
Gameplay Tags
01
4
- C++ 클래스에서 사용하는 GameplayTag는 코드에서 찾아야함.
- FGameplayTag::RequestGameplayTag(FName);
- GameplayTag 이름을 바꾸면 리디렉션이 생성됨
- 리디렉션을 정리하거나, 생성되지 않도록 하는 습관 필요
Gameplay Tags
01
4
- GameplayTag 리디렉션 생성하지 않는 방법
1. 새로운 GameplayTag 생성
2. Search For Reference로 기존 GameplayTag 검색
3. 직접 새로 만든 GameplayTag로 변경
4. 이전 GameplayTag 제거
Gameplay Tags
01
4
- LooseGameplayTag 존재
- Replicate 되지 않는 GameplayTag
- 직접 관리 필요
- TagMapCount도 직접 관리 필요
- UAbilitySystemComponent::AddLooseGameplayTag()
- UAbilitySystemComponent::RemoveLooseGameplayTag()
Gameplay Tags
01
4
Gameplay Tags
01
4
ExactMatch >>
Character.Action == Character.Action.Attack ? FALSE
Character.Action.Attach == Character.Action.Attack ? TRUE
Not ExactMatch >>
Character.Action == Character.Action.Attack ? TRUE
Character.Action.Attach == Character.Action.Attack ? TRUE
Gameplay Tags
01
4
GameplayTag Container
Hierarchical name
- 다수의 GameplayTag는 FGameplayTagContainer에 저장
- TArray<FGameplayTag>를 통해 저장할 수도 있으나, Container 사용
권장
- Tag는 FName을 사용
- Iteration을 위해 TArray<FGameplayTag>를 리턴하는 함수 존재
FGameplayTagContainer
01
4
- 저장된 GameplayTag의 인스턴스 수를 저장하는 TagMap 존재
- Container 내부에 GameplayTag가 존재할 수 있지만, TagMapCount
가 0일 수 있음.
- HasTag(), HasMatchingTag() 등 유사한 함수들은 TagMapCount도
같이 확인
FGameplayTagCountContainer
01
4
GamePlayTagManager
Hierarchical name
- 현재 GameplayTag의 parent 또는 child를 가져올 수 있음
- #include “GameplayTagManager.h”
- UGameplayTagManager::Get().FunctionName()
- Manager를 통해 비교 시, 상수 문자열 조작 및 비교보다 빠르게 처리
GameplayTagManager
01
4
- 클래스 멤버를 노출 할 때 특정 태그만 보이도록 설정
- UPROPERTY(Meta = (Categories =“GameplayCue”))
- 함수 파라미터에 특정 태그만 보이도록 설정
- UFUNCTION(Meta=(GameplayTagFilter=“GameplayCue”))
- GameplayTagContainer 파라미터는 필터링 불가능.
GameplayTagManager
01
4
GamePlayTag Delegate
Hierarchical name
- UAbilitySystemComponent는 GameplayTag가 추가/삭제 될 때마다
Delegate를 통해 사용자에게 알림
- 문법은 코드 참조
- EGameplayTagEventType에 따라 이벤트 시점 정함
- NewOrRemoved : 새롭게 추가/완전히 제거 된 경우
- AnyCountChange : TagMapCount 변경 마다
GameplayTag Delegate
01
4
GameplayTag Delegate
01
4
- Callback 함수 등록 (Register)
- virtual void FunctionName(const FGameplayTag, int32);
- tag : 콜백을 호출한 Tag
- int32 : 새롭게 갱신 된 TagCount
- Delegate는 꼭 등록 후, 해제 필요 (Unregister)
GameplayTag Delegate
01
4
GameplayTag Delegate
01
4
GamePlayAbility
GameplayAbilitySystem
- GameplayAbility (a.k.a GA)
- GA는 게임 플레이 안에서 Actor의 어떤 스킬이나 액션을 할 수 있게
합니다.
- 하나 이상의 GA가 한번에 활성화가 된다면,
1. 뛰면서 (sprint)
2. 스킬(Skill)을 쓸 수 있습니다.
GameplayAbility
01
4
- 이것들을 모두 BP와 C++로 만들 수 있습니다.
- GameplayAbility 예
1. 점프 / 달리기
2. 스킬 시전
3. 일정 시간 동안 X번의 공격을 방어할 수 있는 패시브형 Block
4. 포션 사용, 문열기, 재료 수집
GameplayAbility
01
4
- GameplayAbility로 구현되지 않아도 되는 예시
1. 기본적인 행동에 대한 인풋(Movement Input)
2. UI와의 상호 작용 기능.
- 상점에서 사고 파는 행위
GameplayAbility
01
4
- 이것은 절대적인 룰은 아니고, 단지 추천 내용이며, 게임의 디자인에
따라 달라질 수 있습니다.
- 기본적인 기능과 함께 Level에 따라 Attribute 또는 GameplayAbility
기능 변경 가능
- 기본적인 행동에 Cost와 CoolDown을 GameplayEffect에 포함
GameplayAbility
01
4
- AbilityTask를 통해 일정 시간 기다릴 수 있음.
- 이벤트 대기
- Attribute 변경 대기
- 플레이어가 타겟을 지정할 때 까지 대기
- 특정 애니메이션이 출력될 때까지 대기
GameplayAbility
01
4
- 모든 GameplayAbility는 ActivateAbility() Override
- EndAbility 존재
- GameplayAbility가 완료되거나 취소 될 때 호출
GameplayAbility
01
4
GameplayAbility
01
4
GameplayAbility
01
4
GameplayAbility
01
4
GameplayAbility
01
4
- GameplayAbility BP 내부에서 각종 태그 설정 가능
GameplayAbility
01
4
참고 자료
05
27
- 언리얼 공식 문서
- Tranek Github (비공식이지만, 꽤 방대한 분량 및 Contributors 보유)
- GameplayAbilitySystem 튜토리얼 영상
감사합니다

More Related Content

PPTX
Cpp에서 활용해보는 Lambda식
PDF
레퍼런스만 알면 언리얼 엔진이 제대로 보인다
PPTX
GameInstance에 대해서 알아보자
PPTX
Unreal animation system
PPTX
언리얼을 활용한 오브젝트 풀링
PPTX
Unreal python
PDF
게임 개발에 자주 사용되는 디자인 패턴
PPTX
AAA게임_UI_최적화_및_빌드하기.pptx
Cpp에서 활용해보는 Lambda식
레퍼런스만 알면 언리얼 엔진이 제대로 보인다
GameInstance에 대해서 알아보자
Unreal animation system
언리얼을 활용한 오브젝트 풀링
Unreal python
게임 개발에 자주 사용되는 디자인 패턴
AAA게임_UI_최적화_및_빌드하기.pptx

What's hot (20)

PPTX
언리얼4 플레이어 컨트롤러의 이해.
PDF
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019
PDF
나만의 엔진 개발하기
PDF
[IGC2018] 청강대 이득우 - 언리얼에디터확장을위해알아야할것들
PPTX
리플렉션과 가비지 컬렉션
PPTX
190119 unreal engine c++ 입문 및 팁
PPTX
[데브루키/141206 박민근] 유니티 최적화 테크닉 총정리
PDF
전형규, 프로젝트DH의 절차적 애니메이션 시스템, NDC2017
PDF
NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들
PDF
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
PDF
[NDC 2009] 행동 트리로 구현하는 인공지능
PDF
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012
PDF
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
PDF
행동 트리
PPTX
[Unite2015 박민근] 유니티 최적화 테크닉 총정리
PPTX
게임프로젝트에 적용하는 GPGPU
PDF
코드 생성을 사용해 개발 속도 높이기 NDC2011
PDF
NDC12_Lockless게임서버설계와구현
PDF
[NDC 2010] 그럴듯한 랜덤 생성 컨텐츠 만들기
PDF
NDC 2015 이광영 [야생의 땅: 듀랑고] 전투 시스템 개발 일지
언리얼4 플레이어 컨트롤러의 이해.
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019
나만의 엔진 개발하기
[IGC2018] 청강대 이득우 - 언리얼에디터확장을위해알아야할것들
리플렉션과 가비지 컬렉션
190119 unreal engine c++ 입문 및 팁
[데브루키/141206 박민근] 유니티 최적화 테크닉 총정리
전형규, 프로젝트DH의 절차적 애니메이션 시스템, NDC2017
NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
[NDC 2009] 행동 트리로 구현하는 인공지능
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
행동 트리
[Unite2015 박민근] 유니티 최적화 테크닉 총정리
게임프로젝트에 적용하는 GPGPU
코드 생성을 사용해 개발 속도 높이기 NDC2011
NDC12_Lockless게임서버설계와구현
[NDC 2010] 그럴듯한 랜덤 생성 컨텐츠 만들기
NDC 2015 이광영 [야생의 땅: 듀랑고] 전투 시스템 개발 일지
Ad

More from TonyCms (7)

PPTX
DevRookie_TonyChoi_SpacePartition_Tutorial
PPTX
Unreal_SubSystem.pptx
PPTX
Effective cpp
PPTX
Unreal perception
PPTX
About matinee
PPTX
읽기 좋은 코드가 좋은 코드다.
PPTX
Cascade Shadow Map
DevRookie_TonyChoi_SpacePartition_Tutorial
Unreal_SubSystem.pptx
Effective cpp
Unreal perception
About matinee
읽기 좋은 코드가 좋은 코드다.
Cascade Shadow Map
Ad

Unreal_GameAbilitySystem.pptx

  • 2. Remind GameplayTags GameplayTag Container GameplayTag Manager GameplayTag Delegate GameplayAbility Index 01 02 03 04 05 06
  • 3. - GameplayAbilityComponent 초기 세팅 방법 - Gamplay Ability란 무엇인가? - Gamplay Effect란 무엇인가? - AttributeSet이란 무엇인가? 이전 시간에 진행한 내용 01 4
  • 5. - /Engine/Source/Runtime/GameplayTags/Classes/GameplayTagContainer.h - GameplayTagManager에 등록되어 있는 계층 구조를 갖는 이름 - 오브젝트의 상태를 분류하고, 설명하는 데 유용하게 사용되는 구조체 - 오브젝트가 어떤 태그를 들고 있는지, 없는지에 따라 현재 상태를 나 타낼 수 있음. (ex. Stun) Gameplay Tags 01 4
  • 6. - 새 게임플레이 태그 추가하면 계층 구조로 생성됨. - 태그를 비교 또는 확인 하는 함수에서 유용하게 사용 - 기존 bool이나 enum으로 상태를 정의하던 것을 GameplayTags로 대 체 - 태그는 AbilitySystemComponent에 부여하는 것이 일반적 - IGameplayTagAssetInterface 구현을 통해 엑세스 Gameplay Tags 01 4
  • 7. - DefaultGameplayTags.ini에 정의 - Project Setting -> Project -> GameplayTags - Create - Rename - Search for Reference - Delete Gameplay Tags 01 4
  • 10. - C++ 클래스에서 사용하는 GameplayTag는 코드에서 찾아야함. - FGameplayTag::RequestGameplayTag(FName); - GameplayTag 이름을 바꾸면 리디렉션이 생성됨 - 리디렉션을 정리하거나, 생성되지 않도록 하는 습관 필요 Gameplay Tags 01 4
  • 11. - GameplayTag 리디렉션 생성하지 않는 방법 1. 새로운 GameplayTag 생성 2. Search For Reference로 기존 GameplayTag 검색 3. 직접 새로 만든 GameplayTag로 변경 4. 이전 GameplayTag 제거 Gameplay Tags 01 4
  • 12. - LooseGameplayTag 존재 - Replicate 되지 않는 GameplayTag - 직접 관리 필요 - TagMapCount도 직접 관리 필요 - UAbilitySystemComponent::AddLooseGameplayTag() - UAbilitySystemComponent::RemoveLooseGameplayTag() Gameplay Tags 01 4
  • 14. ExactMatch >> Character.Action == Character.Action.Attack ? FALSE Character.Action.Attach == Character.Action.Attack ? TRUE Not ExactMatch >> Character.Action == Character.Action.Attack ? TRUE Character.Action.Attach == Character.Action.Attack ? TRUE Gameplay Tags 01 4
  • 16. - 다수의 GameplayTag는 FGameplayTagContainer에 저장 - TArray<FGameplayTag>를 통해 저장할 수도 있으나, Container 사용 권장 - Tag는 FName을 사용 - Iteration을 위해 TArray<FGameplayTag>를 리턴하는 함수 존재 FGameplayTagContainer 01 4
  • 17. - 저장된 GameplayTag의 인스턴스 수를 저장하는 TagMap 존재 - Container 내부에 GameplayTag가 존재할 수 있지만, TagMapCount 가 0일 수 있음. - HasTag(), HasMatchingTag() 등 유사한 함수들은 TagMapCount도 같이 확인 FGameplayTagCountContainer 01 4
  • 19. - 현재 GameplayTag의 parent 또는 child를 가져올 수 있음 - #include “GameplayTagManager.h” - UGameplayTagManager::Get().FunctionName() - Manager를 통해 비교 시, 상수 문자열 조작 및 비교보다 빠르게 처리 GameplayTagManager 01 4
  • 20. - 클래스 멤버를 노출 할 때 특정 태그만 보이도록 설정 - UPROPERTY(Meta = (Categories =“GameplayCue”)) - 함수 파라미터에 특정 태그만 보이도록 설정 - UFUNCTION(Meta=(GameplayTagFilter=“GameplayCue”)) - GameplayTagContainer 파라미터는 필터링 불가능. GameplayTagManager 01 4
  • 22. - UAbilitySystemComponent는 GameplayTag가 추가/삭제 될 때마다 Delegate를 통해 사용자에게 알림 - 문법은 코드 참조 - EGameplayTagEventType에 따라 이벤트 시점 정함 - NewOrRemoved : 새롭게 추가/완전히 제거 된 경우 - AnyCountChange : TagMapCount 변경 마다 GameplayTag Delegate 01 4
  • 24. - Callback 함수 등록 (Register) - virtual void FunctionName(const FGameplayTag, int32); - tag : 콜백을 호출한 Tag - int32 : 새롭게 갱신 된 TagCount - Delegate는 꼭 등록 후, 해제 필요 (Unregister) GameplayTag Delegate 01 4
  • 27. - GameplayAbility (a.k.a GA) - GA는 게임 플레이 안에서 Actor의 어떤 스킬이나 액션을 할 수 있게 합니다. - 하나 이상의 GA가 한번에 활성화가 된다면, 1. 뛰면서 (sprint) 2. 스킬(Skill)을 쓸 수 있습니다. GameplayAbility 01 4
  • 28. - 이것들을 모두 BP와 C++로 만들 수 있습니다. - GameplayAbility 예 1. 점프 / 달리기 2. 스킬 시전 3. 일정 시간 동안 X번의 공격을 방어할 수 있는 패시브형 Block 4. 포션 사용, 문열기, 재료 수집 GameplayAbility 01 4
  • 29. - GameplayAbility로 구현되지 않아도 되는 예시 1. 기본적인 행동에 대한 인풋(Movement Input) 2. UI와의 상호 작용 기능. - 상점에서 사고 파는 행위 GameplayAbility 01 4
  • 30. - 이것은 절대적인 룰은 아니고, 단지 추천 내용이며, 게임의 디자인에 따라 달라질 수 있습니다. - 기본적인 기능과 함께 Level에 따라 Attribute 또는 GameplayAbility 기능 변경 가능 - 기본적인 행동에 Cost와 CoolDown을 GameplayEffect에 포함 GameplayAbility 01 4
  • 31. - AbilityTask를 통해 일정 시간 기다릴 수 있음. - 이벤트 대기 - Attribute 변경 대기 - 플레이어가 타겟을 지정할 때 까지 대기 - 특정 애니메이션이 출력될 때까지 대기 GameplayAbility 01 4
  • 32. - 모든 GameplayAbility는 ActivateAbility() Override - EndAbility 존재 - GameplayAbility가 완료되거나 취소 될 때 호출 GameplayAbility 01 4
  • 37. - GameplayAbility BP 내부에서 각종 태그 설정 가능 GameplayAbility 01 4
  • 38. 참고 자료 05 27 - 언리얼 공식 문서 - Tranek Github (비공식이지만, 꽤 방대한 분량 및 Contributors 보유) - GameplayAbilitySystem 튜토리얼 영상