1. 커스텀 어빌리티 시스템 글로벌(Aura Ability System Globals)

어빌리티 시스템 글로벌은 GAS 내에서 전역 변수 등에 쉽게 접근할 수 있도록하는 싱글톤 클래스이다.

이 클래스를 오버라이딩하여 게임플레이 큐 등을 프로젝트에 맞게 발동하는 등이 가능하다.

 

(1) 코드

ASC에서 MakeEffectContext 함수 내에서 게임플레이 이펙트 컨텍스트 핸들을 실질적으로 생성할 때 어빌리티 시스템 글로벌에 접근한다.

FGameplayEffectContextHandle Context = FGameplayEffectContextHandle(UAbilitySystemGlobals::Get().AllocGameplayEffectContext();

이 부분을 변형하여 컨텍스트 핸들을 생성할때 커스텀 어빌리티 시스템 글로벌을 이용하여 커스텀 게임플레이 이펙트 컨텍스트를 사용할 수 있도록 할 것이다.

 

#pragma once

#include "CoreMinimal.h"
#include "AbilitySystemGlobals.h"
#include "AuraAbilitySystemGlobals.generated.h"

UCLASS()
class AURA_API UAuraAbilitySystemGlobals : public UAbilitySystemGlobals
{
	GENERATED_BODY()
	virtual FGameplayEffectContext* AllocGameplayEffectContext() const override;
	
};
#include "AbilitySystem/AuraAbilitySystemGlobals.h"
#include "AuraAbilityTypes.h"

FGameplayEffectContext* UAuraAbilitySystemGlobals::AllocGameplayEffectContext() const
{
	return new FAuraGameplayEffectContext();
}

 

 

(2) 컨피그 파일 수정 - Config/DefaultGame.ini

[/Script/GameplayAbilities.AbilitySystemGlobals]
+AbilitySystemGlobalsClassName="/Script/Aura2.AuraAbilitySystemGlobals"

프로젝트 이름에 맞게 해당 내용을 추가한다.

 

이제 속성 세트에서 글로벌을 통해 게임플레이 이펙트 컨텍스트에 접근할 수 있게 되었다.

즉 bIsBlocked와 bIsCriticalHit에 접근할 수 있게 되었으므로 해당 변수를 이용하여 UI에 강조 표시하는 등의 행위가 가능하다.