1. ํ์ด๋จธ
ํ์ด๋จธ๋ ์ฌ์ฉ์๊ฐ ์ ์ํ ์๊ฐ๋ง๋ค ์ฌ์ฉ์๊ฐ ์ง์ ํ ๋์์ด ์คํ๋๋๋ก ํ๋ค. ์ด๋ฌํ ๊ธฐ๋ฅ์ Tick ํจ์์์ DeltaTime ๊ฐ์ ํตํด ๊ตฌํํ ์๋ ์๋ค. ๊ทธ๋ฌ๋ ์ง์ ํ ๋์์ด ์ง์์ ์ผ๋ก ์คํ๋์ง ์๊ณ , ํน์ ํ ์๊ฐ์๋ง ๋ช ๋ฒ ์คํ๋๊ฑฐ๋, ํ ์ด 1์ด๋ฅผ ๋๋ ๊ฒฝ์ฐ๋ผ๋ฉด Tick ํจ์๋ณด๋ค ํ์ด๋จธ๋ฅผ ์ด์ฉํ๋ ๊ฒ์ด ์ข๋ค.
- ๊ธ๋ก๋ฒ TimerManager์์ ๊ด๋ฆฌํ๋ฉฐ ๊ฒ์ ์ธ์คํด์ค ์ค๋ธ์ ํธ์ ๊ฐ ์๋์ ์กด์ฌํ๋ค.
- TimerManager๋ฅผ ํตํด ํ์ด๋จธ๋ฅผ ๊ฐ์ ธ์ ์ฌ์ฉํ๊ฑฐ๋ ์ข ๋ฃ์ํฌ ์ ์๋ค.
2. ์ฌ์ฉ
1) ์ฌ์ฉ
SetTimer ํจ์๋ฅผ ํตํด ๋๋ ์ด ํ ํจ์๋ ๋ธ๋ฆฌ๊ฒ์ดํธ๋ฅผ ํธ์ถํ๋ ํ์ด๋จธ๋ฅผ ์ค์ ํ๊ฑฐ๋ ๊ทธ ํจ์ ํธ์ถ์ ๋ฌดํ ๋ฐ๋ณตํ๋๋ก ์ค์ ํ ์ ์๋ค.
GetWorldTimerManager().SetTimer(
FTimerHandle & InOutHandle,
UserClass * InObj,
Function,
float InRate,
bool InbLoop = false,
float InFirstDelay = -1.f);
- InOutHandle: ํ์ด๋จธ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํ ๊ฒ์ผ๋ก ์ผ์์ ์ง, ์ฌ๊ฐ, ์ทจ์ ๋ฑ์ ์ฌ์ฉ๋๋ค
- Function: ํ์ด๋จธ๊ฐ ๋์๊ฐ๋ฉด์ ํธ์ถ๋ ํจ์์ด๋ค.
2) ํด์
SetTimer ํจ์์ ์ ๋ฌํ ํ์ด๋จธ ํธ๋ค์ ClearTimer ํจ์์ ์ ๋ฌํ๋ฉด ํ์ด๋จธ๋ฅผ ํด์ ์ํฌ ์ ์๋ค. ์ด ์์ ์์ ๊ธฐ์กด์ ํ์ด๋จธ ํธ๋ค์ ์ ํจํ์ง ์์ ์ํ๊ฐ ๋๋ฉฐ ์๋ก์ด ํ์ด๋จธ ๊ด๋ฆฌ๋ฅผ ์ํด ์ฌ์ฌ์ฉํ ์ ์๋ค.
GetWorldTimerManager().ClearTimer(FTimerHandle& InHandle);
3. ํ์ฉ
void AMyActor::BeginPlay()
{
Super::BeginPlay();
// RepeatingFunction ์ ์ด๋น 1 ํ, ์ง๊ธ๋ถํฐ 2 ์ด๊ฐ ํธ์ถํฉ๋๋ค.
GetWorldTimerManager().SetTimer(MemberTimerHandle, this, &AMyActor::RepeatingFunction, 1.0f, true, 2.0f);
}
void AMyActor::RepeatingFunction()
{
// ์ด ํจ์๋ฅผ ์ถฉ๋ถํ ํธ์ถํ์ผ๋ฉด, ํ์ด๋จธ๋ฅผ ํด์ ํฉ๋๋ค.
if (--RepeatingCallsRemaining <= 0)
{
GetWorldTimerManager().ClearTimer(MemberTimerHandle);
// MemberTimerHandle ์ ์ด์ ๋ค๋ฅธ ํ์ด๋จธ์ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค.
}
// ์ฌ๊ธฐ์ ์ด๋ค ์์
์ ํฉ๋๋ค...
}