0. 개요
지난 포스트에서 불 장판을 제작할 때 테이블을 이용해서 이펙트의 크기(Magnitude)를 변경할 수 있다는 것을 알 수 있었다.
이번 포스트에서 커브 테이블을 이용하는 방법을 알아본다.
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)에 이를 적용해준다.
'UE 5 스터디 > Gameplay Ability System(GAS)' 카테고리의 다른 글
5-2. 게임플레이 태그 생성하기 - (1) 에디터에서 생성하기 (0) | 2024.08.30 |
---|---|
5-1. 게임플레이 태그(Gameplay Tags) (0) | 2024.08.30 |
4-8. 속성 세트 값 클램핑 - PreAttributeChange 함수, PostGameplayEffectExcute 함수 (0) | 2024.08.28 |
4-7. 게임플레이 이펙트 클래스 - (5) 이펙트 수명 관리 (0) | 2024.08.23 |
4-6. 게임플레이 이펙트 클래스 - (4) 무한 지속(Infinte) (0) | 2024.08.23 |