मुख्य कंटेंट तक स्किप करें

PlayerLoopTiming

public enum PlayerLoopTiming : byte

Namespace: UnaPartidaMas.Valkarn.Tasks

Specify करता है कि कौन सा Unity PlayerLoop phase एक ValkarnTasks operation suspension के बाद resume करने के लिए उपयोग करती है। PlayerLoopTiming value pass करना control करता है कि आपकी await continuation frame में कब run होती है, और कब delays और wait conditions जैसे recurring items check होते हैं।

Enum values UniTask के PlayerLoopTiming enum से exactly match करते हैं, जो UniTask से migration simplify करता है।


Default

PlayerLoopTiming.Update (value 8) सभी operations के लिए default है। यदि आप कोई timing argument pass नहीं करते, Update उपयोग होता है।


Values

Initialization

Value: 0
Parent phase: UnityEngine.PlayerLoop.Initialization
Position: phase में पहला sub-system

Initialization phase की बहुत शुरुआत में run होता है, उस phase में Unity के own initialization sub-systems से पहले। यह EarlyUpdate से पहले, per frame एक बार fire होता है। Game code के लिए rarely useful है लेकिन उन systems के लिए relevant हो सकता है जिन्हें frame में कुछ और touch करने से पहले state read या set up करनी हो।


LastInitialization

Value: 1
Parent phase: UnityEngine.PlayerLoop.Initialization
Position: phase में अंतिम sub-system

Unity के built-in initialization sub-systems के बाद, Initialization phase के अंत में run होता है। Initialization के बजाय इसे prefer करें यदि आपको initialization-phase timing चाहिए लेकिन आप Unity के own systems को पहले run होने देना चाहते हैं।


EarlyUpdate

Value: 2
Parent phase: UnityEngine.PlayerLoop.EarlyUpdate
Position: phase में पहला sub-system

EarlyUpdate की शुरुआत में run होता है, Unity input events process करने से पहले और physics simulation step से पहले। यह frame का earliest point है जहाँ previous frame से input data available है। उन systems के लिए useful जिन्हें कोई gameplay code run होने से पहले input sample करना हो।


LastEarlyUpdate

Value: 3
Parent phase: UnityEngine.PlayerLoop.EarlyUpdate
Position: phase में अंतिम sub-system

Unity के own early-update sub-systems complete होने के बाद, EarlyUpdate के अंत में run होता है।


FixedUpdate

Value: 4
Parent phase: UnityEngine.PlayerLoop.FixedUpdate
Position: phase में पहला sub-system

प्रत्येक FixedUpdate step की शुरुआत में run होता है। यह MonoBehaviour.FixedUpdate() की timing correspond करता है। Physics timestep frame delta time के साथ कैसे align होता है इस पर depend करते हुए, Unity per rendered frame zero या more FixedUpdate steps run कर सकता है।

Physics simulation के साथ synchronized रहने वाली किसी भी चीज़ के लिए इस timing का उपयोग करें: Rigidbody velocities read करना, forces apply करना, या physics-determined number of steps के लिए wait करना।

// 10 physics steps wait करें
await ValkarnTask.DelayFrame(10, PlayerLoopTiming.FixedUpdate, ct);

// Physics condition true होने तक wait करें, प्रत्येक physics step पर checked
await ValkarnTask.WaitUntil(() => rb.velocity.magnitude < 0.1f,
PlayerLoopTiming.FixedUpdate, ct);

LastFixedUpdate

Value: 5
Parent phase: UnityEngine.PlayerLoop.FixedUpdate
Position: phase में अंतिम sub-system

Unity के physics sub-systems (Physics.Simulate सहित) complete होने के बाद, FixedUpdate phase के अंत में run होता है। Simulation advance होने के बाद physics results read करने के लिए इसका उपयोग करें।


PreUpdate

Value: 6
Parent phase: UnityEngine.PlayerLoop.PreUpdate
Position: phase में पहला sub-system

PreUpdate phase की शुरुआत में run होता है, जो FixedUpdate के बाद और Update से पहले run होता है। Unity wind zone updates और network event processing जैसे tasks के लिए PreUpdate उपयोग करता है।


LastPreUpdate

Value: 7
Parent phase: UnityEngine.PlayerLoop.PreUpdate
Position: phase में अंतिम sub-system

PreUpdate के अंत में run होता है।


Update

Value: 8  (default)
Parent phase: UnityEngine.PlayerLoop.Update
Position: phase में पहला sub-system

सभी ValkarnTasks operations के लिए default timing। Update phase की शुरुआत में run होता है, जहाँ MonoBehaviour.Update() fire होता है। Gameplay code की vast majority के लिए यह सही choice है।

// ये सभी default रूप से Update उपयोग करते हैं
await ValkarnTask.Yield();
await ValkarnTask.Delay(1000, ct);
await ValkarnTask.WaitUntil(() => _ready, ct: ct);
await ValkarnTask.NextFrame(ct: ct);
await ValkarnTask.DelayFrame(3, ct: ct);

// Explicit — ऊपर के identical
await ValkarnTask.Yield(PlayerLoopTiming.Update);

LastUpdate

Value: 9
Parent phase: UnityEngine.PlayerLoop.Update
Position: phase में अंतिम sub-system

सभी MonoBehaviour.Update() calls और अन्य Update sub-systems complete होने के बाद, Update phase के अंत में run होता है। इसका उपयोग तब करें जब आपकी continuation को अन्य scripts के Update() methods के results observe करने चाहिए — उदाहरण के लिए, एक value polling जिसे दूसरा script Update के दौरान write करता है।

// इस frame में सभी MonoBehaviour.Update() calls के बाद resume करें
await ValkarnTask.Yield(PlayerLoopTiming.LastUpdate);

PreLateUpdate

Value: 10
Parent phase: UnityEngine.PlayerLoop.PreLateUpdate
Position: phase में पहला sub-system

PreLateUpdate phase की शुरुआत में run होता है, जहाँ MonoBehaviour.LateUpdate() fire होता है। Camera following, transform adjustments, और Update के दौरान set final positions पर react करने वाली किसी भी चीज़ के लिए इसका उपयोग करें।

// MonoBehaviour.LateUpdate() के same point पर resume करें
await ValkarnTask.Yield(PlayerLoopTiming.PreLateUpdate);

LastPreLateUpdate

Value: 11
Parent phase: UnityEngine.PlayerLoop.PreLateUpdate
Position: phase में अंतिम sub-system

सभी MonoBehaviour.LateUpdate() calls के बाद, PreLateUpdate phase के अंत में run होता है। इसका उपयोग तब करें जब आपको values read करनी हों जो scripts अपने LateUpdate के दौरान set करते हैं।


PostLateUpdate

Value: 12
Parent phase: UnityEngine.PlayerLoop.PostLateUpdate
Position: phase में पहला sub-system

PostLateUpdate की शुरुआत में run होता है। यह phase frame के लिए rendering submit होने के बाद fire होता है। Unity इसे frame buffer present करने और render state cleanup जैसे tasks के लिए उपयोग करता है। यहीं Camera.onPostRender callbacks भी fire होते हैं।

End-of-frame operations के लिए इस timing का उपयोग करें: screenshot capture, streaming level unloads, या कोई भी काम जो scene fully rendered होने के बाद लेकिन अगला frame शुरू होने से पहले होना चाहिए।


LastPostLateUpdate

Value: 13
Parent phase: UnityEngine.PlayerLoop.PostLateUpdate
Position: phase में अंतिम sub-system

Unity frame-local state reset करने और अगला frame शुरू करने से पहले standard frame loop का अंतिम point। Timing purposes के लिए यह frame का absolute end है।


TimeUpdate

Value: 14
Parent phase: UnityEngine.PlayerLoop.TimeUpdate
Position: phase में पहला sub-system

TimeUpdate phase की शुरुआत में run होता है। Unity इस phase को time-related state (जैसे Time.time) advance करने के लिए उपयोग करता है। यह timing newer Unity versions में EarlyUpdate से पहले fire होती है।

Game code में यह timing rarely needed है। यह primarily उन systems के लिए exist करती है जिन्हें किसी अन्य system के नए time values read करने से पहले time advancement intercept या observe करना हो।


LastTimeUpdate

Value: 15
Parent phase: UnityEngine.PlayerLoop.TimeUpdate
Position: phase में अंतिम sub-system

Unity के time-related sub-systems complete होने के बाद, TimeUpdate phase के अंत में run होता है।


Summary Table

ValueNameUnity PhasePositionComparable MonoBehaviour callback
0InitializationInitializationFirst
1LastInitializationInitializationLast
2EarlyUpdateEarlyUpdateFirst
3LastEarlyUpdateEarlyUpdateLast
4FixedUpdateFixedUpdateFirstFixedUpdate()
5LastFixedUpdateFixedUpdateLastFixedUpdate() के बाद
6PreUpdatePreUpdateFirst
7LastPreUpdatePreUpdateLast
8Update (default)UpdateFirstUpdate()
9LastUpdateUpdateLastसभी Update() के बाद
10PreLateUpdatePreLateUpdateFirstLateUpdate()
11LastPreLateUpdatePreLateUpdateLastसभी LateUpdate() के बाद
12PostLateUpdatePostLateUpdateFirstrendering के बाद
13LastPostLateUpdatePostLateUpdateLastframe का अंत
14TimeUpdateTimeUpdateFirst
15LastTimeUpdateTimeUpdateLast

कौन से APIs PlayerLoopTiming Accept करते हैं

सभी time-based और condition-based ValkarnTasks APIs एक optional PlayerLoopTiming parameter accept करते हैं। Default हमेशा Update है।

MethodSignature
ValkarnTask.YieldYield(PlayerLoopTiming timing = Update)
ValkarnTask.NextFrameNextFrame(PlayerLoopTiming timing = Update, CancellationToken ct = default)
ValkarnTask.DelayFrameDelayFrame(int frameCount, PlayerLoopTiming timing = Update, CancellationToken ct = default)
ValkarnTask.Delay(int)Delay(int ms, DelayType type = DeltaTime, PlayerLoopTiming timing = Update, CancellationToken ct = default)
ValkarnTask.Delay(TimeSpan)Delay(TimeSpan delay, DelayType type = DeltaTime, PlayerLoopTiming timing = Update, CancellationToken ct = default)
ValkarnTask.WaitUntilWaitUntil(Func<bool> predicate, PlayerLoopTiming timing = Update, CancellationToken ct = default)
ValkarnTask.WaitWhileWaitWhile(Func<bool> predicate, PlayerLoopTiming timing = Update, CancellationToken ct = default)

Code Examples

using UnaPartidaMas.Valkarn.Tasks;
using System.Threading;

// अगले Update tick पर Yield (default)
await ValkarnTask.Yield();

// अगले FixedUpdate tick पर Yield — physics-driven code के अंदर उपयोग करें
await ValkarnTask.Yield(PlayerLoopTiming.FixedUpdate);

// Scaled deltaTime का उपयोग करके 500 ms wait करें, प्रत्येक Update पर checked
await ValkarnTask.Delay(500, ct: destroyCancellationToken);

// Unscaled deltaTime का उपयोग करके 500 ms wait करें — Time.timeScale से unaffected
await ValkarnTask.Delay(
500,
DelayType.UnscaledDeltaTime,
PlayerLoopTiming.Update,
destroyCancellationToken);

// Real wall-clock time का उपयोग करके 500 ms wait करें (Stopwatch-based)
await ValkarnTask.Delay(
500,
DelayType.Realtime,
PlayerLoopTiming.Update,
destroyCancellationToken);

// Flag set होने तक wait करें, LateUpdate में checked
bool _isReady;
await ValkarnTask.WaitUntil(() => _isReady, PlayerLoopTiming.PreLateUpdate, destroyCancellationToken);

// Loading के दौरान wait करें, frame के बिल्कुल अंत में checked
await ValkarnTask.WaitWhile(() => _loading, PlayerLoopTiming.LastPostLateUpdate, destroyCancellationToken);

// Exactly 5 physics steps skip करें
await ValkarnTask.DelayFrame(5, PlayerLoopTiming.FixedUpdate, destroyCancellationToken);

// एक full rendered frame advance करें
await ValkarnTask.NextFrame(PlayerLoopTiming.Update, destroyCancellationToken);