/**
 * 설정된 간격으로 지정된 기본 함수를 호출하도록 타이머를 설정합니다.
 * 이 핸들에 타이머가 이미 설정되어 있으면 현재 타이머를 대체합니다.
 *
 * @param InOutHandle    전달된 핸들이 기존 타이머를 참조하는 경우 새 타이머를 추가하기 전에 삭제됨. 두 경우 모두 새 타이머의 새 핸들이 반환됨.
 * @param InObj          타이머 기능을 호출할 개체.
 * @param InTimerMethod  타이머가 작동할 때 호출하는 메서드.
 * @param InRate         설정과 실행 사이의 시간(초). <= 0.f인 경우 기존 타이머를 지움.
 * @param InbLoop        반복적으로 계속 실행하려면 true, 한 번만 실행하려면 false.
 * @param InFirstDelay   루프 타이머의 첫 번째 반복 시간(초). < 0.f InRate>를 사용할 경우.
 */
 
template< class UserClass >
FORCEINLINE void SetTimer(FTimerHandle& InOutHandle, UserClass* InObj, typename FTimerDelegate::TMethodPtr< UserClass > InTimerMethod, float InRate, bool InbLoop = false, float InFirstDelay = -1.f)
{
    InternalSetTimer(InOutHandle, FTimerUnifiedDelegate( FTimerDelegate::CreateUObject(InObj, InTimerMethod) ), InRate, InbLoop, InFirstDelay);
}


// Global TimerManager from GameInstance
FTimerManager& TimerManager = GetModeWorld()->GetGameInstance()->GetTimerManager();

// Set Timer
FTimerHandle TimerHandle;
TimerManager.SetTimer(TimerHandle, this, &ThisClass::TimerFunc, 1.0f, true);

// Clear Timer
if (TimerHandle.IsValid())
{
    FTimerManager& TimerManager = GetModeWorld()->GetGameInstance()->GetTimerManager();
    TimerManager.ClearTimer(TimerHandle);
}

// Check Timer Active - 타이머가 현재 활성화되어 있는지 확인가능
if (GetWorldTimerManager().IsTimerActive(this, TimerHandle))	// return bool
{
    // TODO : 활성화되어 있는 상태에 할 행동
}

 

'::protected > 언리얼4&5' 카테고리의 다른 글

Game Ability System(aka.GAS)  (0) 2023.10.04
UI Optimization(ongoing)  (0) 2023.08.20
Optimization  (0) 2023.07.05
CoreRedirects  (0) 2023.07.03
Subsystem - UGameInstanceSubsystem..  (0) 2023.06.30

+ Recent posts