이번엔 총구로 빛이 모이는 연출을 만들 것이다.
언리얼 마켓플레이스의 Infinity Blade: Effects 에셋은 에픽게임즈가 예전에 만든 ios 게임 인피니티 블레이드의 이펙트들이 담긴 에셋이다. 무료이면서 양질의 이펙트들이 많이 포함되어 있다.
https://www.unrealengine.com/marketplace/en-US/product/infinity-blade-effects
칸나의 EX 스킬과 비슷한 이펙트가 뭐가 있을지 찾아본 결과, 적당히 어울리는 이펙트를 찾았다.
EX 스킬 키를 누르면, 총구에 해당 이펙트가 재생되도록 할 것이다.
이를 위해 Pistol에 새로운 프로퍼티를 만들었다.
//Pistol.h 중 일부
UPROPERTY(EditDefaultsOnly, Category = ExSkill)
UParticleSystem* ExChargeEffect;
UPROPERTY()
UParticleSystemComponent* ExChargeEffectComp;
ExParticleSystemComponent는 스폰한 ExChargeEffect의 컴포넌트를 담을 변수이다.
SpawnActor의 경우에 빗대어 본다면, ExChargeEffect는 클래스를 담는 변수, ExChargeEffectComp는 그 클래스로 만든 인스턴스를 담는 변수이다.
APistol의 ReadyExSkill은 Ex스킬 인풋을 누를 시, KannaCharacter에서 AGun 추상클래스를 통해 동적 바인딩되어 호출되는 함수이다. 여기에 이펙트를 재생하는 코드를 추가할 것이다.
void APistol::ReadyExSkill()
{
Super::ReadyExSkill();
// 총구로 빛 모이는 이펙트
if (ExChargeEffect)
{
ExChargeEffectComp = UGameplayStatics::SpawnEmitterAttached(
ExChargeEffect, Muzzle, NAME_None, FVector::ZeroVector, FRotator(90.f, 0.f,0.f), FVector::One() * 6);
}
}
SpawnEmitterAttached를 통해 UParticleSystem을 스폰한다.
비슷한 함수로 SpawnEmitterAtLocation도 있는데,
SpawnEmitterAtLocation는 초기 위치만 결정해주고, SpawnEmitterAttached는 이펙트를 컴포넌트에 부착시켜 준다.
이 경우 이펙트가 총구에 계속 붙어있어야 하므로, SpawnEmitterAttached가 더 적절하다.
테스트 결과, T를 누르면 총구에 빛이 잘 생기는 것을 확인할 수 있었다.
덤으로, 몇가지 추가 작업을 해주었다.
void AKannaCharacter::Fire() // 여기서는 상태 전환, 애니메이션만 재생
{
/* 생략 */
if (CurrentWeapon && CurrentWeapon->IsShootable()) // 널체크 -> 발사 가능 확인
{
/*생략*/
// EX와 일반 총소리 구별
if (CurrentWeapon->IsExSkillReady() && ExSkillGunSound)
{
UGameplayStatics::PlaySound2D(GetWorld(), ExSkillGunSound);
}
else
{
UGameplayStatics::PlaySound2D(GetWorld(), GunSound);
}
}
}
bool AKannaCharacter::CanUseExSkill() // 스킬 사용 가능 여부 판별
{
return Attributes->GetExGaugePercent() >= 0.3f;
}
void APistol::FireExSkill(FHitResult& HitResult)
{
ExChargeEffectComp->Deactivate(); // 한번 쐈다면 이펙트 비활성화
//투사체 스폰
FVector SpawnLocation = Muzzle->GetComponentLocation();
FRotator SpawnRotation = UKismetMathLibrary::FindLookAtRotation(SpawnLocation, HitResult.ImpactPoint);
FActorSpawnParameters Param;
Param.Instigator = GetInstigator();
GetWorld()->SpawnActor<AExProjectile>(ExProjectileClass, SpawnLocation, SpawnRotation, Param);
ExSkillReady = false; // 한번 쐈다면 EX스킬 OFF
}
이제 적에게 명중했을 시 'BUSTED' 3d 텍스트가 뜨도록 하려고 한다.
'언리얼 엔진 5 > 개발 일지' 카테고리의 다른 글
[UE5] 블루아카이브 TPS게임 개발일지 (57) - 사망 연출 제작 (Geometry Collection) (0) | 2024.02.16 |
---|---|
[UE5] 블루아카이브 TPS게임 개발일지 (56) - EX 스킬 제작 4 (0) | 2024.02.04 |
[UE5] 블루아카이브 TPS게임 개발일지 (54) - EX 스킬 제작 2 + LSP (0) | 2024.02.02 |
[UE5] 블루아카이브 TPS게임 개발일지 (53) - EX 스킬 제작 1 (0) | 2024.02.01 |
[UE5] 블루아카이브 TPS게임 개발일지 (52) - 리팩토링 (0) | 2024.01.30 |