0. 개요

이전 포스트에서 데이터 테이블로 속성 값을 초기화 하는 방법을 사용했다.

그러나 이 것은 아직 미완성인 방법이고 덜 대중적인 방법이다.

따라서 더 대중적인 방법으로, 게임플레이가 시작될 때 게임플레이 이펙트를 사용하여 속성 값을 초기화 하는 방법을 배워본다.

 

 

1. 게임플레이 이펙트로 속성 값 초기화하기

(1) 캐릭터가 생성될 때 초기화 하기 - AuraCharacterBase

protected:
	UPROPERTY(BlueprintReadOnly, EditAnywhere, Category = : "Attributes")
	TSubclassOf<UGameplayEffect> DefaultPrimaryAttributes;

	void InitializePrimaryAttributes() const;

모든 캐릭터를 대상으로 속성 값을 초기화하도록 할 것이다.

 

아래와 같이 게임플레이 이펙트를 타겟(캐릭터)에게 적용하는 방법을 사용한다.

이 때 이펙트의 데이터는 기본 속성 값(DefaultPrimaryAttributes)을 가지고 있다.

void AAuraCharacterBase::InitializePrimaryAttributes() const
{
	check(IsValid(GetAbilitySystemComponent()));
	check(DefaultPrimaryAttributes);

	// 컨텍스트 핸들
	FGameplayEffectContextHandle ContextHandle = GetAbilitySystemComponent()->MakeEffectContext();

	// 스펙 핸들
	FGameplayEffectSpecHandle SpecHandle = GetAbilitySystemComponent()->MakeOutgoingSpec(DefaultPrimaryAttributes, 1.f, ContextHandle);
	
	// 게임플레이 이펙트를 타겟에게 적용함
	GetAbilitySystemComponent()->ApplyGameplayEffectSpecToTarget(*SpecHandle.Data.Get(), GetAbilitySystemComponent());
}

 

플레이어 캐릭터(AuraCharacter)의 ActorInfo가 초기화 되는 함수 하단에 해당 함수를 호출하면 된다.

void AAuraCharacter::InitAbilityActorInfo()
{
    //~~~~~~~~
    InitializePrimaryAttributes();
}

 

 

 

(2) 게임플레이 이펙트 생성

블루프린트를 이용하여 게임플레이 이펙트를 생성한다.

수정자에 4개의 값을 추가하고 각각의 Primary Attribute를 지정하고 수정자 연산자는 Override로, 값은 적당히 지정한다.

 

 

(3) 게임플레이 이펙트 적용

이제 BP_AuraCharacter의 디테일 창에서 PrimaryAttribute를 검색하여 생성한 게임플레이 이펙트를 선택한다.

게임을 실행하면 정상적으로 기본 값이 적용된 것을 볼 수 있다.