게임프로그래밍/실습2

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

우승자는메이 2024. 12. 4. 20:24
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());
}