gas로 만든 rpg 38

GameplayAbilitySystem을 이용한 RPG 프로젝트 - (27) OverlayWidgetController 리팩토링

이번 포스트에서는 기존에 사용하던 WidgetController의 코드를 리팩토링하겠습니다.이전의 WidgetController는 Attribute 별로 델리게이트가 존재하고,델리게이트 별로 연결하는 콜백함수가 따로 존재하였습니다.  하지만, 생각해보면 위의 로직은 Attribute가 변경될 때마다 호출되고,float값을 인자로 사용한다는 공통점이 존재합니다.따라서 델리게이트를 하나로 묶어 관리하면Attribute가 추가될 때마다 델리게이트를 만들지 않아도 되고또 콜백함수가 아닌 람다를 사용하면 불필요한 콜백함수를 선언 + 정의할 필요도 없어집니다.따라서 다음과 같이 코드를 수정하겠습니다. 1) AuraOverlayWdigetControllerDECLARE_DYNAMIC_MULTICAST_DELEGATE..

GameplayAbilitySystem을 이용한 RPG 프로젝트 - (26) 메세지를 위한 전용 UI 만들기

이번 포스트에서는 이전까지 화면에 띄우기만 한 Tag별 메세지를 전용 UI를 만들어 프로젝트에서 사용해보겠습니다. 1) WBP_EffectMessage AuraUserWidget을 상속받은 새로운 위젯 블루 프린트를 생성합니다.해당 위젯의 계층 구조는 다음과 같습니다. 또, Image와 Text에는 애니메이션을 추가하여 UI로서의 효과를 추가하였습니다. 사용하는 함수는 다음과 같습니다.우선, Event Graph에서 다음의 멤버 함수를 추가합니다. DestroyDelay는 0.5초 뒤에 메세지 위젯을 파괴합니다.이후 외부에서 사용할 함수를 정의합니다. SetImageandText 함수는 인자로 Image와 Text를 받습니다.우선, Text를 SetText로 TextMessage 변수에 저장합니다.그리고..

GameplayAbilitySystem을 이용한 RPG 프로젝트 - (25) Data Table을 활용하여 GE별 메세지 출력하기

이번 포스트에서는 이전에 만든 Data Table을 활용하여GE가 발동된 경우, GameplayTag 그 자체를 출력하는 것이 아닌GameplayTag 별 메세지를 출력하도록 수정해보겠습니다. 1) DT_MessageWidgetData기존에 만든 DataTable을 다음과 같이 수정했습니다. 이제 DataTable에 저장된 정보대로 Message Tag와 GE의 GameplayTag를 대조하여 Message를 출력하게 됩니다.따라서 이전에 만든 GE들의 태그를 Message Tag와 동일하게 변경해줘야 합니다. 2) 이전에 만든 GE 블루프린트 이전에 만든 4개의 GE 블루 프린트 모두 위와 같이 Message 태그를 갖도록 설정하였습니다.이제 C++ 스크립트에서 몇 가지 수정을 해줘야 합니다. 3) A..

GameplayAbilitySystem을 이용한 RPG 프로젝트 - (24) UI와 GE의 Tag 연동 준비

이번 포스트에서는 이전 포스트에서 소개해드린,GE의 Tag와 UI를 연동하는 작업의 준비를 해보도록 하겠습니다. 우선, 기존의 Ability System Component에서 수행하던 작업을 델리게이트를 통해 UI Controller에게 넘겨주어 처리하도록 하겠습니다. 1) AuraAbilitySystemComponent#pragma once#include "CoreMinimal.h"#include "AbilitySystemComponent.h"#include "AuraAbilitySystemComponent.generated.h"DECLARE_MULTICAST_DELEGATE_OneParam(FEffectAssetTags, const FGameplayTagContainer& /*AssetTags*/);..

GameplayAbilitySystem을 이용한 RPG 프로젝트 - (23) GE의 델리게이트를 통해 현재 적용되는 GE의 Tag를 출력하기

이번에는 이전에 배운 Gameplay Effect의 Tag를 한번 화면에 띄워 보도록 하겠습니다.따라서 Gameplay Effect가 적용될 때 사용할 수 있는 델리게이트를 사용하여 이를 구현해보겠습니다. 1) AbilitySystemComponent의 델리게이트GAS의 주체인 ASC는 많은 기능을 지원합니다.그 중에서도 OnGameplayEffectAppliedDelegateToSelf 델리게이트는 GameplayEffect가 자기자신에게 적용되는 경우 호출됩니다.따라서 해당 델리게이트를 사용해보도록 하겠습니다. 2) 코드 일부를 수정또한, 코드 구조를 일부 수정하도록 하겠습니다.현재 구조에서 AuraCharacterBase가 부모 클래스이고,AuraPlayer와 AuraEnemy가 부모 클래스에서 상..

GameplayAbilitySystem을 이용한 RPG 프로젝트 - (22) GameplayTag 기초

GameplayTag는 GAS 뿐만이 아닌 다른 경우에서도 매우 유용하게 사용할 수 있습니다.GameplayTag는 열거형이지만, 훨씬 더 체계화되고 정교해진 열거형이라고 생각하시면 됩니다. GAS에서 GameplayTag는GameplayTag Container안에 저장되고, GameplayTag Manager에 의해 관리됩니다. 뿐만 아니라 GameplayTag는 블루 프린트가 아닌 C++ 단계에서도 사용이 가능한데인터페이스인 IGameplayTagAssetInterface로 사용할 수 있습니다.사용가능한 메서드는 대표적으로 GetOwnedGameplayTags - 갖고 있는 GameplayTag를 가져옴HasMatchingGameplayTag - 지정한 특정 GameplayTag를 갖고 있는지 확인H..

GameplayAbilitySystem을 이용한 RPG 프로젝트 - (21) Attribute에 Clamp를 적용하고 기존의 GE에 Curve Table 적용

1) Attribute에 Clamp를 적용기존의 Attribute가 동작하는 방식을 보면,따로 Clamp 함수를 사용하지 않아 Attribute에 반영할 변경 수치를 조정하지 못하고 있습니다.이를 위해 2개의 함수를 사용할 예정입니다. 1) PreAttributeChangePreAttributeChange 함수는 실제 Attribute에 변환이 적용되기 이전에 호출되는 함수입니다. Attribute의 BaseValue와 CurrentValue 중에서 CurrentValue를 바꿔주기 위해 사용하는데,CurrentValue를 바꾼 값으로 계속 유지하지 않고 바꾼 값만 리턴하게 됩니다. 따라서 PreAttributeChange 함수 이후의 연산들은 바뀌기 이전의 CurrentValue를 다시 사용하게 됩니다..

GameplayAbilitySystem을 이용한 RPG 프로젝트 - (20) Gameplay Effect의 적용 / 삭제 정책을 본격적으로 사용하기

지난 포스트에 이어서 설정을 구성하는 작업을 다시 시작하겠습니다.그 전에 먼저 Gameplay Effect가 작동하는 명세를 간단한 이미지로 표현하였습니다.  1) Instant GE한 프레임동안 동작하는 Instant GE의 경우BeginOverlap과 EndOverlap 이벤트에서 모두 적용합니다.EndOverlap에서 해당 GE를 적용하는 이유는 Instant GE의 경우 적용되어도한 프레임이 지난 후에 삭제되기 때문입니다. 2) Duration GE지정한 Duration 동안 동작하는 Duration GE의 경우도 Instant GE와 비슷하게 동작합니다.BeginOverlap과 EndOverlap 이벤트에서 모두 적용합니다.마찬가지로 EndOverlap에서 해당 GE를 적용하는 이유는 Durat..

GameplayAbilitySystem을 이용한 RPG 프로젝트 - (19) 영구적인 Gameplay Effect를 위한 설정

Duration Policy가 Inifinite로 설정될 Gamplay Effect를 사용하기 위해서는기존의 코드를 조금 변경해야 할 필요가 있습니다. 이전에는 Gameplay Effect를 사용하는 Actor에게서 Overlap 이벤트가 발생해도Duration이 끝나거나 Instant라면 알아서 종료되기 때문에 큰 문제가 없었지만 Infinite인 경우 종료되지 않아 영구히 적용되 때문입니다. 따라서 코드를 수정하도록 하겠습니다. 1) Gameplay Effect를 발동하는 AuraEffectActorUENUM(BlueprintType)enum class EEffectApplicationPolicy : uint8{ ApplyOnOverlap, ApplyOnEndOverlap, DoNotApply};UE..

GameplayAbilitySystem을 이용한 RPG 프로젝트 - (18) Gameplay Effect를 중복 적용하는 Effect Stacking

이번에는 Effect Stacking에 대해 알아보겠습니다.동일한 GE가 중복되어 적용되는 것을 Effect Stacking이라고 하는데,적용되는 방식으로 크게 2가지로 구분할 수 있습니다. 1) Aggregate by SourceGE를 적용하는 Source를 Stack 대상으로 삼아 동작합니다.GE를 적용할 때마다 Stack에 Count를 하나씩 쌓아 놓게 됩니다.이때 Stack Limit Count라는 Count의 제한 범위를 두는데만약, Stack에 쌓인 Count의 수가 Stack Limit Count와 동일하다면 그 이후의 GE는 적용하지 않습니다. 2)  Aggregate by TargetGE를 적용하는 Target을 Stack 대상으로 삼아 동작합니다.GE가 적용될 때마다 Stack에 Cou..