관리 메뉴

Mini

[UE5] fix : 이펙트액터 확장성 리팩토링, 이펙트 적용구현 본문

UE5/GameplayEffect

[UE5] fix : 이펙트액터 확장성 리팩토링, 이펙트 적용구현

Mini_96 2024. 6. 2. 00:41

1. 다지우고 씬루트만 cpp에서 달아주고

BP에서 Mesh등을 선택한다.

// 생성자
AAuraEffectActor::AAuraEffectActor()
{
	// 이 액터는 매 프레임마다 업데이트되지 않음
	PrimaryActorTick.bCanEverTick = false;

	SetRootComponent(CreateDefaultSubobject<USceneComponent>("SceneRoot"));
}

2. StaticMesh 달아주고, 포션지정

3.포션매쉬 : 노콜리전

스피어콜리전을 달아주고 스피어콜리전과 충돌시 행동을 하면된다.

 

 

4. Target의 ASC 를 가져오는법

i) 액터들이 ASInterface를 구현하도록 강제하고, 가져오기

void AAuraEffectActor::ApplyEffectToTarget(AActor* Target, TSubclassOf<UGameplayEffect> GameplayEffectClass)
{
	IAbilitySystemInterface* ASCInterface = Cast<IAbilitySystemInterface>(Target);

 

ii) 언리얼 제공 함수사용 

장점 : ASInterface 구현안해서 캐스팅실패해도 찾아서 리턴함.

UAbilitySystemBlueprintLibrary::GetAbilitySystemComponent(Target);

 

5. 이펙트 적용 구현

void AAuraEffectActor::ApplyEffectToTarget(AActor* Target, TSubclassOf<UGameplayEffect> GameplayEffectClass)
{
	UAbilitySystemComponent* TargetASC = UAbilitySystemBlueprintLibrary::GetAbilitySystemComponent(Target);
	if(nullptr==TargetASC) return; //target에 ASC가 없는경우

	check(GameplayEffectClass); //효과가 있는지 검사
	FGameplayEffectContextHandle EffectContextHandle = TargetASC->MakeEffectContext(); //게임플레이 효과에 대한 컨텍스트 정보를 저장하는 데 사용되는 구조체생성
	EffectContextHandle.AddSourceObject(this); //현재 개체(효과를 호출하는 액터나 구성 요소 등)를 효과 컨텍스트에 추가합니다. 이는 적용 시 효과의 소스를 식별하는 데 도움이 됩니다.
	const FGameplayEffectSpecHandle EffectSpecHandle = TargetASC->MakeOutgoingSpec(GameplayEffectClass,1.f, EffectContextHandle);
	// 적용될 게임플레이 효과에 대한 사양이 포함된 'FGameplayEffectSpecHandle'을 생성
	TargetASC->ApplyGameplayEffectSpecToSelf(*EffectSpecHandle.Data.Get()); // 대상의 AbilitySystemComponent에 효과 사양(효과의 세부 사항)을 적용
	//이 프로세스를 통해 게임플레이 효과가 게임의 능력 시스템 내에서 적절하게 맥락화되고, 지정되고, 적용됩니다.
}

 

6. 다음시간에 GameplayEffectClass를 만들어보겠음