이전에 글을 썼던 Timer에 Lambda를 사용하는 방법을 조금 응용해보고자 한다.
float DeltaTime = GetWorld()->GetDeltaSeconds();
float TimeElapsed = 0.0f;
GetWorldTimerManager().SetTimer(TestTimerHandle, [this, DeltaTime, TimeElapsed]() mutable {
TimeElapsed += DeltaTime;
float Alpha = TimeElapsed / 1.5f;
if (Alpha >= 1.5f) {
GetWorldTimerManager().ClearTimer(TestTimerHandle);
}
}, DeltaTime, true);
기존에는 변수 하나정도를 바꾸는 Lambda식 이였는데, 이번에는 자체적으로 함수를 만드는 것이다.
mutable로 정의함으로써 대괄호 내부에 있는 변수를 사용이 가능하다. 다만 이외의 전역변수가 아닌 지역변수는 사용이 불가능하다. 그렇기에 사용하고자 하는 변수는 대괄호 내부로 포함시키도록 한다.
Timer에 대한 Rate값을 DeltaSencond로 주고, Loop을 돌림으로써 블루프린트에 있는 Timeline 노드와 비슷한 효과를 줄 수 있다.
적절한 타이밍에 Timer를 초기화만 잘 시켜준다면 다방면으로 활용이 가능할 것이다.