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

What's hot

언리얼4 플레이어 컨트롤러의 이해.
언리얼4 플레이어 컨트롤러의 이해.언리얼4 플레이어 컨트롤러의 이해.
언리얼4 플레이어 컨트롤러의 이해.
Wuwon Yu
 
[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기
Sang Heon Lee
 
[NDC 2009] 행동 트리로 구현하는 인공지능
[NDC 2009] 행동 트리로 구현하는 인공지능[NDC 2009] 행동 트리로 구현하는 인공지능
[NDC 2009] 행동 트리로 구현하는 인공지능
Yongha Kim
 
NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들
NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들
NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들
영욱 오
 
송창규, unity build로 빌드타임 반토막내기, NDC2010
송창규, unity build로 빌드타임 반토막내기, NDC2010송창규, unity build로 빌드타임 반토막내기, NDC2010
송창규, unity build로 빌드타임 반토막내기, NDC2010
devCAT Studio, NEXON
 
게임 프레임워크의 아키텍쳐와 디자인 패턴
게임 프레임워크의 아키텍쳐와 디자인 패턴게임 프레임워크의 아키텍쳐와 디자인 패턴
게임 프레임워크의 아키텍쳐와 디자인 패턴
MinGeun Park
 
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
Heungsub Lee
 
NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현
noerror
 
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019
devCAT Studio, NEXON
 
MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현
YEONG-CHEON YOU
 
[데브루키/141206 박민근] 유니티 최적화 테크닉 총정리
[데브루키/141206 박민근] 유니티 최적화 테크닉 총정리[데브루키/141206 박민근] 유니티 최적화 테크닉 총정리
[데브루키/141206 박민근] 유니티 최적화 테크닉 총정리
MinGeun Park
 
[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규
[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규
[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규
ChangKyu Song
 
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
내훈 정
 
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - PerfornanceGCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance
상현 조
 
임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013
devCAT Studio, NEXON
 
테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템
QooJuice
 
게임프로젝트에 적용하는 GPGPU
게임프로젝트에 적용하는 GPGPU게임프로젝트에 적용하는 GPGPU
게임프로젝트에 적용하는 GPGPU
YEONG-CHEON YOU
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
devCAT Studio, NEXON
 
나만의 엔진 개발하기
나만의 엔진 개발하기나만의 엔진 개발하기
나만의 엔진 개발하기
YEONG-CHEON YOU
 
서비스중인 게임 DB 설계 (쿠키런 편)
서비스중인 게임 DB 설계 (쿠키런 편)서비스중인 게임 DB 설계 (쿠키런 편)
서비스중인 게임 DB 설계 (쿠키런 편)
_ce
 

What's hot (20)

언리얼4 플레이어 컨트롤러의 이해.
언리얼4 플레이어 컨트롤러의 이해.언리얼4 플레이어 컨트롤러의 이해.
언리얼4 플레이어 컨트롤러의 이해.
 
[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기
 
[NDC 2009] 행동 트리로 구현하는 인공지능
[NDC 2009] 행동 트리로 구현하는 인공지능[NDC 2009] 행동 트리로 구현하는 인공지능
[NDC 2009] 행동 트리로 구현하는 인공지능
 
NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들
NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들
NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들
 
송창규, unity build로 빌드타임 반토막내기, NDC2010
송창규, unity build로 빌드타임 반토막내기, NDC2010송창규, unity build로 빌드타임 반토막내기, NDC2010
송창규, unity build로 빌드타임 반토막내기, NDC2010
 
게임 프레임워크의 아키텍쳐와 디자인 패턴
게임 프레임워크의 아키텍쳐와 디자인 패턴게임 프레임워크의 아키텍쳐와 디자인 패턴
게임 프레임워크의 아키텍쳐와 디자인 패턴
 
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
 
NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현
 
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019
 
MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현
 
[데브루키/141206 박민근] 유니티 최적화 테크닉 총정리
[데브루키/141206 박민근] 유니티 최적화 테크닉 총정리[데브루키/141206 박민근] 유니티 최적화 테크닉 총정리
[데브루키/141206 박민근] 유니티 최적화 테크닉 총정리
 
[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규
[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규
[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규
 
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
 
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - PerfornanceGCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance
 
임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013
 
테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템
 
게임프로젝트에 적용하는 GPGPU
게임프로젝트에 적용하는 GPGPU게임프로젝트에 적용하는 GPGPU
게임프로젝트에 적용하는 GPGPU
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
 
나만의 엔진 개발하기
나만의 엔진 개발하기나만의 엔진 개발하기
나만의 엔진 개발하기
 
서비스중인 게임 DB 설계 (쿠키런 편)
서비스중인 게임 DB 설계 (쿠키런 편)서비스중인 게임 DB 설계 (쿠키런 편)
서비스중인 게임 DB 설계 (쿠키런 편)
 

More from TonyCms

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

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
 

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