[UE] ADecalActor로 혈흔 남기기

KANTAM·2022년 8월 28일
0

Unreal Engine

목록 보기
11/11

ADecalActor

살인마에게 가격당한 생존자는 이동할 때, 혈흔을 남기는데 언리얼의 데칼 시스템으로 구현할 수 있다.
ADecalActor와 타이머로 부상상태일 때, 주기적으로 혈흔을 남기도록 설정했다.

void USurvivorStatComponent::BeginPlay()
{
	Super::BeginPlay();
    
    GetWorld()->GetTimerManager().SetTimer(BloodTimerHandle, this, &USurvivorStatComponent::SpawnBloodDecalActor, BloodRate, true, BloodRate);
	PauseBloodTimerHandle();
}

void USurvivorStatComponent::SpawnBloodDecalActor()
{
	FVector DecalSpawnLocation = FVector(Survivor->GetActorLocation().X, Survivor->GetActorLocation().Y, 0.0f);
	FRotator DecalSpawnRotation = FRotator(0.0f, 0.0f, Survivor->GetActorRotation().Yaw);
	BloodDecal = GetWorld()->SpawnActor<ADecalActor>(DecalSpawnLocation, DecalSpawnRotation);
	if (BloodDecal != nullptr)
	{
		BloodDecal->SetDecalMaterial(BloodDecalMaterial);
		BloodDecal->SetLifeSpan(3.5f);
		BloodDecal->GetDecal()->DecalSize = FVector(120.0f, 120.0f, 120.0f);
	}![](https://velog.velcdn.com/images/wlsry45963/post/54a79056-c42c-4361-a549-ac1e3ba57d55/image.gif)

}

void USurvivorStatComponent::PauseBloodTimerHandle()
{
	GetWorld()->GetTimerManager().PauseTimer(BloodTimerHandle);
}

void USurvivorStatComponent::UnPauseBloodTimerHandle()
{
	GetWorld()->GetTimerManager().UnPauseTimer(BloodTimerHandle);
}

BeginPlay에서 혈흔 타이머를 설정한다. SpawnActor로 데칼을 생성하고 SetDecalMaterail, SetLifeSpan, 데칼의 DecalComponent에서 DecalSize를 조정하여 혈흔의 수명과 크기, 머티리얼을 설정한다.
PauseTimer, UnPauseTimer로 Timer동작을 설정할 수 있다.

결과

0개의 댓글