본문 바로가기

게임프로그래밍/실습2

[실습2] 47. 발사체에 대미지 부여 효과를 주는 게임플레이 이펙트 적용하기

1. 게임플레이 이펙트 발사체에 적용하기

 

게임플레이 이펙트 클래스를 만들고 이것을 발사체에 적용하는 방법을 알아보자.

 

발사체의 헤더파일로 간다.

 

게임플레이 이펙트 스펙 핸들을 만들어 이곳에서 게임플레이 이펙트를 관리할 것이다.

UPROPERTY(BlueprintReadWrite, meta = (ExposeOnSpawn = true))
FGameplayEffectSpecHandle DamageEffectSpecHandle;

 

이제 이 핸들의 설정은 이 발사체를 생성하는 게임플레이어빌리티에서 설정할 것이다.

 

게임 플레이 이펙트를 저장할 변수를 만든다.

UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
TSubclassOf<UGameplayEffect> DamageEffectClass; 

 

스펙 핸들을 만들어야 할 것이다.

 

이제 ASC를 가져와 게임플레이 이펙트를 설정해주면 된다.

UAbilitySystemComponent* SourceASC = UAbilitySystemBlueprintLibrary::GetAbilitySystemComponent(GetAvatarActorFromActorInfo());

FGameplayEffectSpecHandle SpecHandle = SourceASC->MakeOutgoingSpec(DamageEffectClass, GetAbilityLevel(), SourceASC->MakeEffectContext());
Projectile->DamageEffectSpecHandle = SpecHandle;

 

이제 핸들을 가지게 되었으니 실제로 효과를 적용할 일만 남았다.

 

발사체 클래스로 가도록 하자.

 

이렇게 하면 게임플레이 이펙트를 적용할 수 있을 것이다.

if (UAbilitySystemComponent* TargetASC = UAbilitySystemBlueprintLibrary::GetAbilitySystemComponent(OtherActor))
{
    TargetASC->ApplyGameplayEffectSpecToSelf(*DamageEffectSpecHandle.Data.Get());
}