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를 만들어보겠음
'UE5 > GameplayEffect' 카테고리의 다른 글
[UE5] Infinite이펙트 만들기 // 불에 닿으면 피감소 구현 (0) | 2024.06.02 |
---|---|
[UE5] Stacking // 포션을 한번에 여러개 먹을시 제한설정 (0) | 2024.06.02 |
[UE5] 이펙트 종류 // 즉시 vs (기간,무한) vs 주기, 0.1초마다 마나1씩증가구현 2초동안 (0) | 2024.06.02 |
[UE5] 지속 이펙트 구현 (0) | 2024.06.02 |
[UE5] GameplayEffect 만들기 // 포션먹으면 증가 구현 (0) | 2024.06.02 |