SlideShare a Scribd company logo
1 of 39
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

What's hot

GameInstance에 대해서 알아보자
GameInstance에 대해서 알아보자GameInstance에 대해서 알아보자
GameInstance에 대해서 알아보자TonyCms
 
190119 unreal engine c++ 입문 및 팁
190119 unreal engine c++ 입문 및 팁190119 unreal engine c++ 입문 및 팁
190119 unreal engine c++ 입문 및 팁KWANGIL KIM
 
Umg ,이벤트 바인딩, Invaidation Box
Umg ,이벤트 바인딩, Invaidation BoxUmg ,이벤트 바인딩, Invaidation Box
Umg ,이벤트 바인딩, Invaidation Box대영 노
 
임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012devCAT Studio, NEXON
 
나만의 엔진 개발하기
나만의 엔진 개발하기나만의 엔진 개발하기
나만의 엔진 개발하기YEONG-CHEON YOU
 
NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀승명 양
 
테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템QooJuice
 
그럴듯한 랜덤 생성 컨텐츠 만들기
그럴듯한 랜덤 생성 컨텐츠 만들기그럴듯한 랜덤 생성 컨텐츠 만들기
그럴듯한 랜덤 생성 컨텐츠 만들기Yongha Kim
 
멀티스레드 렌더링 (Multithreaded rendering)
멀티스레드 렌더링 (Multithreaded rendering)멀티스레드 렌더링 (Multithreaded rendering)
멀티스레드 렌더링 (Multithreaded rendering)Bongseok Cho
 
[2019] 언리얼 엔진을 통해 살펴보는 리플렉션과 가비지 컬렉션
[2019] 언리얼 엔진을 통해 살펴보는 리플렉션과 가비지 컬렉션[2019] 언리얼 엔진을 통해 살펴보는 리플렉션과 가비지 컬렉션
[2019] 언리얼 엔진을 통해 살펴보는 리플렉션과 가비지 컬렉션NHN FORWARD
 
게임프로젝트에 적용하는 GPGPU
게임프로젝트에 적용하는 GPGPU게임프로젝트에 적용하는 GPGPU
게임프로젝트에 적용하는 GPGPUYEONG-CHEON YOU
 
Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심흥배 최
 
UE4 Garbage Collection
UE4 Garbage CollectionUE4 Garbage Collection
UE4 Garbage CollectionQooJuice
 
[0410 박민근] 기술 면접시 자주 나오는 문제들
[0410 박민근] 기술 면접시 자주 나오는 문제들[0410 박민근] 기술 면접시 자주 나오는 문제들
[0410 박민근] 기술 면접시 자주 나오는 문제들MinGeun Park
 
UI아트 작업자를 위한 언리얼엔진4 UMG #1
UI아트 작업자를 위한 언리얼엔진4 UMG #1UI아트 작업자를 위한 언리얼엔진4 UMG #1
UI아트 작업자를 위한 언리얼엔진4 UMG #1Hong-Gi Joe
 
[0903 구경원] recast 네비메쉬
[0903 구경원] recast 네비메쉬[0903 구경원] recast 네비메쉬
[0903 구경원] recast 네비메쉬KyeongWon Koo
 
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기Jaeseung Ha
 
[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기Sang Heon Lee
 
게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델
게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델
게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델Seungmo Koo
 
임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013devCAT Studio, NEXON
 

What's hot (20)

GameInstance에 대해서 알아보자
GameInstance에 대해서 알아보자GameInstance에 대해서 알아보자
GameInstance에 대해서 알아보자
 
190119 unreal engine c++ 입문 및 팁
190119 unreal engine c++ 입문 및 팁190119 unreal engine c++ 입문 및 팁
190119 unreal engine c++ 입문 및 팁
 
Umg ,이벤트 바인딩, Invaidation Box
Umg ,이벤트 바인딩, Invaidation BoxUmg ,이벤트 바인딩, Invaidation Box
Umg ,이벤트 바인딩, Invaidation Box
 
임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012
 
나만의 엔진 개발하기
나만의 엔진 개발하기나만의 엔진 개발하기
나만의 엔진 개발하기
 
NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀
 
테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템
 
그럴듯한 랜덤 생성 컨텐츠 만들기
그럴듯한 랜덤 생성 컨텐츠 만들기그럴듯한 랜덤 생성 컨텐츠 만들기
그럴듯한 랜덤 생성 컨텐츠 만들기
 
멀티스레드 렌더링 (Multithreaded rendering)
멀티스레드 렌더링 (Multithreaded rendering)멀티스레드 렌더링 (Multithreaded rendering)
멀티스레드 렌더링 (Multithreaded rendering)
 
[2019] 언리얼 엔진을 통해 살펴보는 리플렉션과 가비지 컬렉션
[2019] 언리얼 엔진을 통해 살펴보는 리플렉션과 가비지 컬렉션[2019] 언리얼 엔진을 통해 살펴보는 리플렉션과 가비지 컬렉션
[2019] 언리얼 엔진을 통해 살펴보는 리플렉션과 가비지 컬렉션
 
게임프로젝트에 적용하는 GPGPU
게임프로젝트에 적용하는 GPGPU게임프로젝트에 적용하는 GPGPU
게임프로젝트에 적용하는 GPGPU
 
Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심
 
UE4 Garbage Collection
UE4 Garbage CollectionUE4 Garbage Collection
UE4 Garbage Collection
 
[0410 박민근] 기술 면접시 자주 나오는 문제들
[0410 박민근] 기술 면접시 자주 나오는 문제들[0410 박민근] 기술 면접시 자주 나오는 문제들
[0410 박민근] 기술 면접시 자주 나오는 문제들
 
UI아트 작업자를 위한 언리얼엔진4 UMG #1
UI아트 작업자를 위한 언리얼엔진4 UMG #1UI아트 작업자를 위한 언리얼엔진4 UMG #1
UI아트 작업자를 위한 언리얼엔진4 UMG #1
 
[0903 구경원] recast 네비메쉬
[0903 구경원] recast 네비메쉬[0903 구경원] recast 네비메쉬
[0903 구경원] recast 네비메쉬
 
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
 
[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기
 
게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델
게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델
게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델
 
임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013
 

More from TonyCms

Unreal_SubSystem.pptx
Unreal_SubSystem.pptxUnreal_SubSystem.pptx
Unreal_SubSystem.pptxTonyCms
 
Unreal python
Unreal pythonUnreal python
Unreal pythonTonyCms
 
Effective cpp
Effective cppEffective cpp
Effective cppTonyCms
 
Unreal perception
Unreal perceptionUnreal perception
Unreal perceptionTonyCms
 
About matinee
About matineeAbout matinee
About matineeTonyCms
 
읽기 좋은 코드가 좋은 코드다.
읽기 좋은 코드가 좋은 코드다.읽기 좋은 코드가 좋은 코드다.
읽기 좋은 코드가 좋은 코드다.TonyCms
 
Cascade Shadow Map
Cascade Shadow MapCascade Shadow Map
Cascade Shadow MapTonyCms
 

More from TonyCms (7)

Unreal_SubSystem.pptx
Unreal_SubSystem.pptxUnreal_SubSystem.pptx
Unreal_SubSystem.pptx
 
Unreal python
Unreal pythonUnreal python
Unreal python
 
Effective cpp
Effective cppEffective cpp
Effective cpp
 
Unreal perception
Unreal perceptionUnreal perception
Unreal perception
 
About matinee
About matineeAbout matinee
About matinee
 
읽기 좋은 코드가 좋은 코드다.
읽기 좋은 코드가 좋은 코드다.읽기 좋은 코드가 좋은 코드다.
읽기 좋은 코드가 좋은 코드다.
 
Cascade Shadow Map
Cascade Shadow MapCascade Shadow Map
Cascade Shadow Map
 

Recently uploaded

JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP Korea
 
공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화JMP Korea
 
데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법JMP Korea
 
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP Korea
 
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?Jay Park
 
JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP Korea
 
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP Korea
 
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석JMP Korea
 

Recently uploaded (8)

JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례
 
공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화
 
데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법
 
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
 
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
 
JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!
 
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
 
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
 

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 튜토리얼 영상