UE5/Ability Tasks
[UE5] 발사체 이펙트, 소리, 수명 구현
Mini_96
2024. 6. 15. 22:06
* 필요한 변수, 함수 추가
class AURA_API AAuraProjectile : public AActor
{
GENERATED_BODY()
p...
virtual void Destroyed() override;
...
private:
bool bHit=false;
...
UPROPERTY(EditAnywhere)
TObjectPtr<UNiagaraSystem> ImpactEffect; //충격효과 =>체력깍기
UPROPERTY(EditAnywhere)
TObjectPtr<USoundBase> ImpactSound; //부딪히면 소리
UPROPERTY(EditAnywhere)
TObjectPtr<USoundBase> LoopingSound;
UPROPERTY()
TObjectPtr<UAudioComponent> LoopingSoundComponent;
};
- 구현
void AAuraProjectile::Destroyed()
{
//클라의경우 && 복제안된경우
if(!bHit && !HasAuthority())
{
//오버랩되면 소리재생
UGameplayStatics::PlaySoundAtLocation(this,ImpactSound,GetActorLocation(),FRotator::ZeroRotator);
//오버랩되면 효과실행
UNiagaraFunctionLibrary::SpawnSystemAtLocation(this,ImpactEffect,GetActorLocation());
}
Super::Destroyed();
}
void AAuraProjectile::OnSphereOverlap(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor,
UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult)
{
//오버랩되면 소리재생
UGameplayStatics::PlaySoundAtLocation(this,ImpactSound,GetActorLocation(),FRotator::ZeroRotator);
//오버랩되면 효과실행
UNiagaraFunctionLibrary::SpawnSystemAtLocation(this,ImpactEffect,GetActorLocation());
//서버에있으면 파괴 => 클라에복제안되게
if(HasAuthority())
{
Destroy();
}
else //클라에서 파괴되기전 겹치는경우, bHit=true이면 이미 복제된거임 / bHit=false이면 복제안된거임, play
{
bHit=true;
}
}
* 불발사 시작할때, 소리 노티파이 추가
* 루핑사운드 => 불에서 계속소리나도록
- 변수추가
UPROPERTY(EditAnywhere)
TObjectPtr<USoundBase> LoopingSound; //불자체에서 반복해서 나느소리
UPROPERTY()
TObjectPtr<UAudioComponent> LoopingSoundComponent; //멈추기 위해 저장
- SpawnSoundAttached는 return 으으로 LSC를 뱉는다.
이를 저장하고 오버랩되면, 종료시키면 된다.
void AAuraProjectile::BeginPlay()
{
Super::BeginPlay();
Sphere->OnComponentBeginOverlap.AddDynamic(this, &AAuraProjectile::OnSphereOverlap); //오버랩 이벤트 달기, 실행될함수
LoopingSoundComponent = UGameplayStatics::SpawnSoundAttached(LoopingSound,GetRootComponent());
}
void AAuraProjectile::OnSphereOverlap(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor,
UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult)
{
...
LoopingSoundComponent->Stop(); // 적과오버랩되면 불 자체에서나는 루핑사운드 중지
- 변수에 의존성주입 (안하면 nullptr)
* 발사체에 수명설정
private:
UPROPERTY(EditDefaultsOnly)
float LifeSpan = 15.f;
void AAuraProjectile::BeginPlay()
{
Super::BeginPlay();
SetLifeSpan(LifeSpan); //이 발사체의 수명을 정함
feat : 발사체 이펙트, 소리, 수명 구현 · DongHoonYu96/GameplayAbilitySystem_Aura@51ccd4d
Bisu96 committed Jun 15, 2024
github.com
* 적만 때리도록 fix -> next step