0. 개요

지난 포스트에서 불 장판을 제작할 때 테이블을 이용해서 이펙트의 크기(Magnitude)를 변경할 수 있다는 것을 알 수 있었다.

 

4-6. 게임플레이 이펙트 클래스 - (4) 무한 지속(Infinte)

0. 개요따로 해제하지 않는 이상 무한으로 적용되는 형태의 이펙트를 구현한다. 1. 데미지를 입히는 화염 지대 블루프린트 생성(1) BP_FireArea박스 콜리전과 나이아가라 이펙트 컴포넌트를 가지도

crat.tistory.com

이번 포스트에서 커브 테이블을 이용하는 방법을 알아본다.

 

 

1. 체력 포션 살펴보기

체력 포션에서 회복 값을 25로 지정했었다.

(수정자(Modifiers) -> 수정자 크기(Modifier Magnitude) -> Magnitude Calculation Type : Scalable Float / Scalable Float Magnitude : 25.f)

이제 이 값에 하드 코딩된 숫자가 아닌 표(Table)를 적용할 것이다.

 

 

(1) 커브 테이블(Curve Table) 만들기

컨텐츠 브라우저 우클릭 - 기타 - 커브 테이블을 선택한다.

그래프 버튼과 표 버튼을 눌러 그래프 표시 / 표 표시 상태로 전환할 수 있다.

삼각형 버튼을 눌러 열을 추가할 수 있다.

값을 적당히 추가하고 GE_PotionHeal에 적용한다.

 

 

(2) 커브 테이블 적용하기

Scalable Float Magnitude 우측의 커브 테이블 사용을 누르면 이전에 생성했던 커브 테이블이 보일 것이다.

해당 커브 테이블을 선택하고, 값을 추가했던 커브를 선택한다.

 

 

(3) 데이터 읽기

이제 우측의 프리뷰를 보면 1레벨에 5가 아니라 125가 적용된 것을 볼 수 있다.

이는 이전에 지정했던 Magnitude가 25이므로, 각 커브의 값에 25가 곱해졌기 때문이다.

따라서 커브를 그대로 이용하려면 25가 아니라 1로 변경해준다.

 

 

2. 물약 레벨 별 효과 차등 적용하기 - Actor Level 도입

이제 물약 자체가 1레벨부터 10레벨까지의 값 커브를 가지게 되었으므로, 각자 물약의 레벨에 따라 회복량이 변동하도록 만들 것이다.

이를 ActorLevel이라 하고 모든 이펙트 엑터들이 가질 수 있도록 멤버 변수로 지정한다.

 

(1) 코드 - AuraEffectActor

	UPROPERTY(EditAnywhere, BlueprintReadOnly, Category="Applied Effects")
	float ActorLevel = 1.f;
void AAuraEffectActor::ApplyEffectToTarget(AActor *TargetActor, TSubclassOf<UGameplayEffect> GameplayEffectClass)
{
	// ~~~~~~~~~~~~
	// Gameplay Effect Spec 생성
	const FGameplayEffectSpecHandle EffectSpecHandle = TargetASC->MakeOutgoingSpec(GameplayEffectClass, ActorLevel, EffectContextHandle);
	// ~~~~~~~~~~~~

이제 EffectSpecHandle에 하드 코딩된 1.f를 제거하고 ActorLevel로 대체한다.

 

 

(2) 게임 플레이에 적용하기

새로운 물약을 배치한 후 디테일 창에서 Actor Level 값을 변경해준다.

커브 테이블은 연속적인 데이터이므로 Actor Level이 정수여야 할 필요는 없다.

이제 Actor Level에 따라 회복량이 달라지는 것을 확인할 수 있다.

 

 

(3) 테이블 확장하기

이 테이블을 체력 포션 뿐 아니라 마나 포션에도 적용하고자 한다.

커브를 추가해서 마나 커브를 생성하고 마나 포션(GE_PotionMana)에 이를 적용해준다.