gas로 만든 rpg 37

GameplayAbilitySystem을 이용한 RPG 프로젝트 - (36) 인터페이스를 통한 레벨 적용하기

이번 포스트에는 게임에 등장하는 캐릭터별로 레벨을 설정하기 위한 인터페이스를 만들고이를 실제로 적용해보도록 하겠습니다. 스탯을 결정짓는 레벨의 관리는플레이어의 경우, PlayerState에서 관리하고몬스터의 경우 Enemy에서 관리하도록 하겠습니다. 1) CombatInterface// Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreMinimal.h"#include "UObject/Interface.h"#include "CombatInterface.generated.h"// This class does not need to be modified.UINTERFACE(Mini..

GameplayAbilitySystem을 이용한 RPG 프로젝트 - (35) Secondary Attribute를 GameplayEffect로 초기화하기

이번 포스트에서는 이전에 추가만 해놓은 Secondary Attribute를 GE를 통해 초기화하겠습니다.이 과정은 Primary Attribute를 초기화하는 것과 매우 동일하므로기존의 구조를 리팩토링하여 유연성과 확장성을 높히도록 하겠습니다. 1) AuraCharacterBase#pragma once#include "CoreMinimal.h"#include "GameFramework/Character.h"#include "AbilitySystemInterface.h"#include "AuraCharacterBase.generated.h"class USkeletalMeshComponent;class UAbilitySystemComponent;class UAttributeSet;class UGamepla..

GameplayAbilitySystem을 이용한 RPG 프로젝트 - (34) Attribute와 연관된 Attribute

이번 포스트에서는 이전에 만든 Primary Attribute를 자세하게 알아보고이 Primary Attribute에 영향을 받아 동작하는 새로운 Attribute들을 알아보겠습니다. 1) Primary Attribute1) Strength : 물리적 데미지를 증가시키는 스탯2) Intelligence : 마법 데미지를 증가시키는 스탯3) Resilience : 방어구와 방어구 효율을 증가시키는 스탯4) Vigor : 체력을 증가시키는 스탯크게 위의 4가지로 구성되어 있습니다.오늘 만들어볼 Secondary Attribute의 경우 Primary Attribute에 영향을 받으면서추가적으로 Secondary Attribute끼리도 영향을 받게끔 설계하도록 하겠습니다. 2) Secondary Attribu..

GameplayAbilitySystem을 이용한 RPG 프로젝트 - (33) GE의 모디파이어_Attribute Based 파헤치기 03

이번 포스트에서는 Gameplay Effect에 사용가능한Attribute Base 모디파이어에서 다음의 3가지 요소를 알아보겠습니다.  위의 3가지 요소는 매우 간단한 방식으로 사용되는데, 다음의 식으로 이를 표현할 수 있습니다. (Backing Attribute의 값 + Pre Multiply Additive Value) * Coefficient + Post Multiply Additive Value 위의 식을 통해 Backing Attribute를 타깃 Attribute에 적용하게 됩니다.간단하게 현재 사용중인 프로젝트에서 예를 들어보겠습니다. 현재 Vigor의 값은 9입니다.이때 Pre Multiply Additive Value의 값은 3.0이므로 12.0의 값이 나옵니다.여기에 Coefficie..

GameplayAbilitySystem을 이용한 RPG 프로젝트 - (32) GE의 모디파이어_Attribute Based 파헤치기 02

이번 포스트에서도 역시 Attribute Based에 대해 알아보겠습니다.이전에 Gameplay Effect에서 총 2개의 Backing Attribute를 설정하였습니다.  위 2개의 Backing Attribute는 Health에 대해서 Add 연산을 수행합니다.그런데 여기에 Divide 즉, 나눗셈을 수행하게 되면 어떻게 될까요?다음과 같이 하나의 Backing Attribute를 추가해보았습니다. 현재 Health의 값은 50이고, Vigor은 9, Resilience는 12, 마지막으로 Intelligence는 17입니다.연산자간의 우선순위를 생각하면 나눗셈이 가장 우선으로 처리되야 합니다.따라서 실제 결과는 다음과 같이 나와야 합니다. 50 / 17 + 9 + 12 = 23.16 이 값이 맞는..

GameplayAbilitySystem을 이용한 RPG 프로젝트 - (31) GE의 모디파이어_Attribute Based 파헤치기 01

이번 포스트에서는 Gameplay Effect의 여러 모디파이어 중에서 Attribute Based에 대해 알아보겠습니다. 1) BP_TestActor 우선, 시험용도의 EffectActor를 하나 만들겠습니다.해당 Actor는 모디파이어가 Attribute Based인 Gameplay Effect를 타깃에게 적용합니다. 2) GE_TestAttributeBaseGameplay Effect를 하나 생성하고 모디파이어를 Attribute Based로 설정하면 다음과 같이 나타납니다. 부분별로 나눠서 정리해보았습니다. Attribute Based 모디파이어에 대해 몇 차례 나눠서 알아볼 예정이므로우선, Backing Attribute에 대해 알아보겠습니다. 2 - 1) Attribute to CaptureA..

GameplayAbilitySystem을 이용한 RPG 프로젝트 - (30) GE를 통해 Attribute 초기화하기

이번 포스트에서는 Attribute를 초기화하는 2가지 방법 중에서 2번째 방법인Gameplay Effect를 통해 Attribute를 초기화하는 방법을 알아보겠습니다.우선, 이전에 설정한 Data Table은 삭제하는 것으로 시작하겠습니다. 1) AuraCharacterBase#pragma once#include "CoreMinimal.h"#include "GameFramework/Character.h"#include "AbilitySystemInterface.h"#include "AuraCharacterBase.generated.h"class USkeletalMeshComponent;class UAbilitySystemComponent;class UAttributeSet;class UGameplayE..

GameplayAbilitySystem을 이용한 RPG 프로젝트 - (29) 데이터 테이블을 통한 Attribute 초기

이번 포스트에서는 Attribute를 초기화하는 2가지 방법 중에서데이터 테이블을 통해 초기화하는 방법을 알아보겠습니다.그리고 동시에 향후 게임에서 사용할 Attribute를 추가하도록 하겠습니다. 1) AuraAttributeSetUCLASS()class AURA_API UAuraAttributeSet : public UAttributeSet{ . . . public: /* * RPG Stat Attribute & Method */ UPROPERTY(BlueprintReadOnly, ReplicatedUsing = OnRep_Strength, Category = "Stat Attributes") FGameplayAttributeData Strength; ATTRIBUTE_ACCESSORS(UAu..

GameplayAbilitySystem을 이용한 RPG 프로젝트 - (28) UI에 변화 예정 수치 표현 + Attribute의 변화 값 둘러보기

이번 포스트에서는 UI를 개선하고, Attribute의 변화 값에 대해 한번 알아보겠습니다. 1) UI 개선이번에 개선할 UI는 다음과 같습니다. 위의 체력바와 같이 변화하는 수치를 미리 알려주는 불투명한 UI를 추가하도록 하겠습니다.우선, 기존에 사용하던 체력바 블루프린트인 WBP_GlobeProgressBar에 UI를 추가합니다.해당 UI의 이름은 ProgressBar_Ghost입니다.  그리고 해당 UI를 설정하는 함수 UpdateGhostGlobeBrush를 추가합니다.구성은 다음과 같습니다. 그리고 Event Graph로 돌아와 기존의 PreConstruct에 UpdateGhostGlobeBrush를 연결합니다. 그리고 기존의 ProgressBar를 설정하던 함수 SetProgressBar를 수..

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

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