* 필요한 변수, 함수 추가
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); //이 발사체의 수명을 정함
* 적만 때리도록 fix -> next step
'UE5 > Ability Tasks' 카테고리의 다른 글
[UE5] 데미지 입히기 구현 // fix : 시작시불쏘는버그, 불에서벗어나도 체력깍이는버그 (0) | 2024.06.16 |
---|---|
[UE5] 발사체와 충돌할 대상 정리 (0) | 2024.06.15 |
[UE5] 발사체 방향으로 캐릭회전 구현 (0) | 2024.06.15 |
[UE5] 발사체 적방향으로 발사구현, shift키 + 허공클릭시 발사구현// 캐릭 겹침시 카메라 확대 해결, 클라에서 발사체 방향 버그 수정 (0) | 2024.06.13 |
[UE5] GAS 에서 예측 개념 (0) | 2024.06.12 |