TickTimer - cheona-thousand-man/Unity-myBasics-Wiki GitHub Wiki
๊ฐ์
- Photon์์ ๋คํธ์ํฌ ๊ฐ์ฒด ์ํ ๋๊ธฐํํ๋๋ฐ ์ฌ์ฉํ๋ ๊ธฐ๋ฅ(๋๊ธฐํ๋ ๊ฐ์์ ํ์ด๋จธ)
- NetworkRunner์ ํจ๊ป ์ฌ์ฉ
- ๋ชฉํ Tick(TickTimer ์ด๊ธฐํ ์ ์ ์ฅ)์ ์ ์ฅํ๊ณ ํ์ฌ simulation Tick(NetworkRunner์์ ๊ฐ์ ธ์ด)์ ์ฌ์ฉํ์ฌ ๊ฒ์ฌ ์คํํ๋ ๊ตฌ์กฐ์ฒด
API
- CreateFromSeconds ์ ๊ณตํ Seconds์ ํ์ฌ Tick์ ๊ธฐ๋ฐ์ผ๋ก ๊ณ์ฐ๋ ๋ชฉํ Tick์ด ํฌํจ๋ TickTimer ๋ฐํ
- CreateFromTicks ์ ๊ณตํ Ticks๊ณผ ํ์ฌ Tick์ ๊ธฐ๋ฐ์ผ๋ก ๊ณ์ฐ๋ ๋ชฉํ Tick์ด ํฌํจ๋ TickTimer ๋ฐํ
- RemainingTime TickTimer ๋ง๋ฃ๊น์ง ๋จ์ Seconds ๋ฐํ
- RemainingTicks TickTimer ๋ง๋ฃ๊น์ง ๋จ์ Ticks ๋ฐํ
- IsRunning ๋ชฉํ Tick > ํ์ฌ Tick ? true : false
- Expired ๋ชฉํ Tick <= ํ์ฌ Tick ? true : false
- ExpiredOrNotRunning TickTimer ์ํ๊ฐ default or TickTimer.None or Expired์ผ ๊ฒฝ์ฐ true ๋ฐํ
TickTimer ์ด๊ธฐํ
- TickTimer๊ฐ ๋ง๋ฃ๋ ๊ฒฝ์ฐ, ๋งค Tick๋ง๋ค true ๋ฐํ
- ๋ง๋ฃ ํ ๋ ๋ฒ์งธ Tick๋ถํฐ๋ ์ฌ์ค์ ํ๋ ๊ฒ ์ ์ฉ
[Networked] TickTimer timer { get; set; }
void FixedUpdateNetwork()
{
if (timer.Expired(Runner))
{
// Execute Logic
// Reset timer
timer = TickTimer.None;
// alternatively: timer = default.
Debug.Log("Timer Expired");
}
}
์ปค์คํ
๊ธฐ๋ฅ ์ถ๊ฐ
public struct CustomTickTimer : INetworkStruct
{
private int _target;
private int _initialTick;
public bool Expired(NetworkRunner runner) => runner.IsRunning && _target > 0
&& (Tick) _target <= runner.Simulation.Tick;
public bool IsRunning => _target > 0;
public static CustomTickTimer CreateFromTicks(NetworkRunner runner, int ticks)
{
if (runner == false || runner.IsRunning == false)
return new CustomTickTimer();
CustomTickTimer fromTicks = new CustomTickTimer();
fromTicks._target = (int) runner.Simulation.Tick + ticks;
fromTicks._initialTick = runner.Simulation.Tick;
return fromTicks;
}
public float NormalizedValue(NetworkRunner runner)
{
if (runner == null || runner.IsRunning == false || IsRunning == false)
return 0;
if (Expired(runner))
return 1;
return ElapsedTicks(runner) / (_target - (float)_initialTick);
}
public int ElapsedTicks(NetworkRunner runner)
{
if (runner == false || runner.IsRunning == false)
return 0;
if (IsRunning == false || Expired(runner))
return 0;
return runner.Simulation.Tick - _initialTick;
}
}
[Networked]
public CustomTickTimer MyTickTimer { get; set; }
public void StartTimer()
{
if (Runner.IsServer)
{
MyTickTimer = CustomTickTimer.CreateFromTicks(Runner, 120);
}
}
public override void FixedUpdateNetwork()
{
Debug.Log($"Elapsed {MyTickTimer.ElapsedTicks(Runner)} ticks.");
Debug.Log($"Normalized Value {MyTickTimer.NormalizedValue(Runner)}.");
if (MyTickTimer.Expired(Runner))
{
// Execute Logic
// Reset timer
MyTickTimer = default;
Debug.Log("Timer Finished on tick: " + Runner.Simulation.Tick);
}
}