언리얼 프로젝트를 진행하고 공부하면서 기억하면 좋을만한 내용들을 메모하였습니다.
Timer
란 일정시간 동안 혹은 일정시간 이후 작업을 지속시킬수 있습니다
예) 아이템을 먹고 일정시간동안 무적, 불속에서 지속시간동안 데미지
저는 FlyingTime을 측정하여 공중에있던 시간만큼 착지 딜레이를 주기위해 Timer를 사용하였습니다.
// .h
void SetFlyingTime(); // Flying시간을 Deltatime만큼 더해줄 함수
void StarFlyingTimer(); // 채공에 돌입할경우 Timer를 실행시켜줄 함수
void StopFlyingTimer(); // 채공이 끝날경우 Timer를 초기화 시켜줄 함수
FTimerHandle FlyingTimerHandle; // TimerHandler로 델리게이트와 구분되는 고유핸들
// .cpp
void UTPS_CharacterMovementComponent::SetFlyingTime()
{
// DeltaTime만큼 Flying시간 측정
FlyingTime += GetWorld()->DeltaTimeSeconds;
}
void UTPS_CharacterMovementComponent::StarFlyingTimer()
{
FlyingTime = 0.0f;
// FlyingTimerHandler에 SetFlyingTime을 등록하고 , DeltaTimeSeconds마다 반복하여 호출시킴
GetWorld()->GetTimerManager().SetTimer(FlyingTimerHandle, this, &UTPS_CharacterMovementComponent::SetFlyingTime,
GetWorld()->DeltaTimeSeconds, true);
}
void UTPS_CharacterMovementComponent::StopFlyingTimer()
{
// 측정이 끝났나면 Handler를 초기화
GetWorld()->GetTimerManager().ClearTimer(FlyingTimerHandle);
}
Tick에서 매프레임마다 지속적으로 상태를 체크하는것보다 Timer로 원하는 구간에만 사용하는것이 효율적일것입니다.