gas로 만든 rpg 37

GameplayAbilitySystem을 이용한 RPG 프로젝트 - (16) 일정시간동안 적용되는 GameplayEffect 만들고 적용하기

이번에는 기존의 Duration Policy가 Instant 였던 GE 대신Duration Policy가 Has Duration으로 설정되어 설정한 시간동안만 적용되는 GE를 만들어보겠습니다. 그전에 먼저 EffectActor의 코드를 수정하여InstantGameplayEffect 말고도 DurationGameplayEffect도 처리할 수 있도록 수정하겠습니다. 1) GE를 적용할 AuraEffectActor...UCLASS()class AURA_API AAuraEffectActor : public AActor{ GENERATED_BODY() public: AAuraEffectActor();protected: virtual void BeginPlay() override; /* * Gameplay Ef..

GameplayAbilitySystem을 이용한 RPG 프로젝트 - (15) 일시적인 GameplayEffect 만들고 적용하기

본격적으로 GameplayEffect를 만들기 전에 기존의 EffectActor에서 코드를 일부 수정하겠습니다.수정사항은 다음과 같습니다. #pragma once#include "CoreMinimal.h"#include "GameFramework/Actor.h"#include "AuraEffectActor.generated.h"class UGameplayEffect;UCLASS()class AURA_API AAuraEffectActor : public AActor{ . . . // Target 인자의 이름을 TargetActor로 변경 UFUNCTION(BlueprintCallable) void ApplyEffectToTarget(AActor* TargetActor, TSubclassOf Gameplay..

GameplayAbilitySystem을 이용한 RPG 프로젝트 - (14) GameplayEffect와 EffectActor 코드 수정

본격적인 GameplayEffect를 적용하기 전에 GameplayEffect가 무엇이고 어떻게 동작하는지 알아보겠습니다. 1) GameplayEffectGAS 프레임워크에서는 게임에 영향을 주는 객체를 별도로 분리해서 관리합니다.이때 별도로 분리되는 객체를 GameplayEffect로서 사용합니다.GameplayEffect를 정의하는 클래스들은 데이터 전용 클래스이므로 따로 로직을 추가해서는 안됩니다. GameplayEffect에는 Duration Policy가 존재하여 이를 통해 GE를 적용하는 기간을 결정합니다.Instant는 Attribute에 즉각 적용되며, 한 프레임에서만 실행됩니다.Has Duration은 지정한 시간동안 적용되는 GE에 사용합니다.Inifite는 명시적으로 종료하지 않으면 ..

GameplayAbilitySystem을 이용한 RPG 프로젝트 - (13) Model의 갱신에 따른 UI 변화

이번에는 기존의 AttributeSet의 초기값을 불러와 UI를 설정하는 단계를 넘어서Attribute가 변화하면 실제로 UI에 변화를 반영하도록 해보겠습니다.또 기존의 체력바 UI말고도 마나 UI도 손보도록 하겠습니다. 언리얼 엔진에서는 GAS 시스템에서 Attribute가 변경되는 경우 콜백 함수를 호출할 수 있는 함수를 제공합니다.그 함수는 GetGameplayAttributeValueChangeDelegate 로서 AbilitySystemComponent가 호출합니다. 따라서 저 함수를 설정하면 해당하는 Attribute가 변경될 때마다 콜백함수를 호출할 수 있게 됩니다.따라서 WidgetController에 GetGameplayAttributeValueChangeDelegate 함수를 설정하도록..

GameplayAbilitySystem을 이용한 RPG 프로젝트 - (12) 체력 UI에 델리게이트 연결하기

이번에는 기존의 UI 시스템을 발전시켜 Attribute Set의 데이터를 UI가 반영할 수 있도록 하겠습니다.우선 C++ 클래스의 일부를 손보도록 하겠습니다. Model의 정보를 View에 반영하는 일은 UAuraWidgetController가 수행해야 합니다.따라서 함수를 추가하겠습니다.1) UAuraWidgetController...UCLASS()class AURA_API UAuraWidgetController : public UObject{ GENERATED_BODY() public: . . . virtual void BroadcastInitialValues(); protected: . . .}; ...void UAuraWidgetController::BroadcastInit..

GameplayAbilitySystem을 이용한 RPG 프로젝트 - (11) WidgetController의 설계와 HUD 재구성

이번 포스트에서는 본격적인 MVC 패턴을 사용하여 Controller의 역할을 수행하는 WidgetController를 설계하겠습니다. 1) MVC 패턴에서 Controller의 역할을 수행하는 AAuraWidgetControllerController는 Model(=데이터)과 View(=UI)를 왕복하며 움직여야 합니다.따라서 양쪽으로부터 접근이 가능해야 하므로 다음과 같이 코드를 재구성하였습니다.// Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreMinimal.h"#include "UObject/NoExportTypes.h"#include "AuraWidgetContro..

GameplayAbilitySystem을 이용한 RPG 프로젝트 - (10) Overlay Widget과 HUD

이번에는 기존에 만든 Wiget 블루 프린트를 상속받아 체력과 마나를 나타내는 위젯을 만들고그 위젯을 Overlay Widget에 담고 최종적으로는 HUD를 통해 화면에 연출하겠습니다.  위와 같이 기존의 Widget 블루 프린트에서 2개의 자식 WBP를 만들었습니다.이제 이 2개의 위젯을 배치한 Overlay Widget으로 가보겠습니다.  WBP_Overlay는 기존에 만든 WBP들과는 다르게 Canvas Panel을 사용합니다.Canvas Panel은 기존에 사용하던 Box에 비해서는 사용비용이 비싸지만보여지는 시야 전체를 표현할 때는 편리하게 사용이 가능합니다. 이제 이 WBP_Overlay를 화면에 표시하기 위한 HUD 클래스를 만들겠습니다.1) Head Up Display를 표현하는 AuraH..

GameplayAbilitySystem을 이용한 RPG 프로젝트 - (9) UI를 설계하고 부모 체력 UI 만들기

이번 포스트에서는 사용자에게 데이터를 보여주고 사용자로부터 데이터를 입력받는 UI를 만들겠습니다.프로젝트에서 UI는 MVC 패턴을 사용하여 만들겠습니다.MVC 패턴은 Model, View, Controller의 3가지로 구성됩니다.각각 수행하는 역할에 차이가 있습니다.Model은 데이터를 다루는 쪽을 의미합니다. 프로젝트에서는 Attribute Set을 의미합니다.View는 보여지는 쪽을 의미합니다. 프로젝트에서는 UI를 의미합니다.Controller는 Model의 정보를 View로 전달하거나 View의 정보를 Model에 전달합니다. 따라서 이를 위해 View와 Controller 역할을 수행하는 클래스를 만들겠습니다.언리얼에서 UI 역할을 하는 Widget들은 UUserWidger 클래스에서 상속되므..

GameplayAbilitySystem을 이용한 RPG 프로젝트 - (8) Attribute Set을 만들고 적용하기

이번 포스트에서는 본격적인 GE를 도입하기 이전에 Attribute를 건드려보겠습니다.Actor 클래스를 하나 추가하여 기존에 만든 Attribute Set의 Attribute 중 하나인 Health를 변경하겠습니다.해당 클래스의 코드는 다음과 같습니다. 1) GE 설계 이전에 Attribute를 변경할 AAuraEffectActor#pragma once#include "CoreMinimal.h"#include "GameFramework/Actor.h"#include "AuraEffectActor.generated.h"class USphereComponent;UCLASS()class AURA_API AAuraEffectActor : public AActor{ GENERATED_BODY() public: ..

GameplayAbilitySystem을 이용한 RPG 프로젝트 - (7) Attribute Set을 만들고 적용하기

이번 포스트에서는 Attribute Set을 만들고 한번 적용해보겠습니다.Attribute Set은 GAS에서 사용할 여러 데이터들을 담아놓은 클래스로 ASC로 접근이 가능합니다.기본적으로 하나 이상의 AS를 만들 수 있지만 불필요한 용량의 문제가 발생합니다.그러므로 일반적으로는 하나의 Attribute Set에 모든 Attribute들을 담아 관리합니다.프로젝트에서도 위와 같은 방법으로 진행하도록 하겠습니다.Attribute에 담겨진 Attribute들은 실수이며 FGameplayAttributeData의 자료형을 가집니다.Attribute를 코드로 인위적으로 설정할 수 있지만대부분의 경우 Gameplay Effect를 통해 설정하는 것이 바람직합니다.GE를 사용하여 값을 변동하는 경우 디버깅이 쉽고 ..