Cysharp/UniTask · critical · Exception
Target PlayerLoopSystem does not found. Type:
Error message
Target PlayerLoopSystem does not found. Type:
What it means
Thrown by PlayerLoopHelper.FindLoopSystemIndex during initialization when scanning the Unity PlayerLoopSystem[] array for a subsystem type (e.g., UnityEngine.PlayerLoop.Update, LateUpdate, FixedUpdate) that is not present. UniTask injects its update/delay runners into these subsystems; if a required type is missing it cannot function and aborts initialization.
Source
Thrown at src/UniTask/Assets/Plugins/UniTask/Runtime/PlayerLoopHelper.cs:379
}
}
UniTaskSynchronizationContext.Run();
}
#endif
private static int FindLoopSystemIndex(PlayerLoopSystem[] playerLoopList, Type systemType)
{
for (int i = 0; i < playerLoopList.Length; i++)
{
if (playerLoopList[i].type == systemType)
{
return i;
}
}
throw new Exception("Target PlayerLoopSystem does not found. Type:" + systemType.FullName);
}
static void InsertLoop(PlayerLoopSystem[] copyList, InjectPlayerLoopTimings injectTimings, Type loopType, InjectPlayerLoopTimings targetTimings,
int index, bool injectOnFirst, Type loopRunnerYieldType, Type loopRunnerType, PlayerLoopTiming playerLoopTiming)
{
var i = FindLoopSystemIndex(copyList, loopType);
if ((injectTimings & targetTimings) == targetTimings)
{
copyList[i].subSystemList = InsertRunner(copyList[i], injectOnFirst,
loopRunnerYieldType, yielders[index] = new ContinuationQueue(playerLoopTiming),
loopRunnerType, runners[index] = new PlayerLoopRunner(playerLoopTiming));
}
else
{
copyList[i].subSystemList = RemoveRunner(copyList[i], loopRunnerYieldType, loopRunnerType);
}
}
View on GitHub (pinned to ceac8d6946)
Solutions
- Call PlayerLoopHelper.Initialize() early at startup, before any other system modifies the player loop.
- Ensure no other plugin has stripped standard subsystem types (Update, LateUpdate, FixedUpdate, etc.) from PlayerLoop.GetCurrentPlayerLoop().
- Upgrade or downgrade UniTask to a version compatible with your Unity version.
- If you must use a custom player loop, merge UniTask's hooks into it rather than replacing it wholesale.
Example fix
// before (another plugin replaces player loop first) CustomFramework.ReplacePlayerLoop(); PlayerLoopHelper.Initialize(); // throws: subsystem not found // after (initialize UniTask first, then customize) PlayerLoopHelper.Initialize(); CustomFramework.ModifyPlayerLoop(); // preserve existing subsystems
Defensive patterns
Strategy: validation
Validate before calling
// Verify standard subsystems exist before initializing UniTask
var loop = PlayerLoop.GetCurrentPlayerLoop();
var requiredTypes = new[] { typeof(PlayerLoop.Update), typeof(PlayerLoop.LateUpdate), typeof(PlayerLoop.FixedUpdate) };
foreach (var t in requiredTypes)
{
bool found = false;
foreach (var sys in loop.subSystemList)
if (sys.type == t) { found = true; break; }
if (!found)
Debug.LogError($"Missing player loop subsystem: {t.FullName}");
}
PlayerLoopHelper.Initialize(); Try / catch
try
{
PlayerLoopHelper.Initialize();
}
catch (Exception ex) when (ex.Message.Contains("PlayerLoopSystem does not found"))
{
// A subsystem type is missing; check for conflicting plugins
Debug.LogError("PlayerLoop initialization failed: " + ex.Message);
} Prevention
- Call PlayerLoopHelper.Initialize() early — before other plugins modify the player loop.
- Check your Unity version is compatible with the UniTask version you are using.
- Avoid frameworks that wholesale-replace the player loop; prefer additive modification.
When it happens
Trigger: Calling PlayerLoopHelper.Initialize() after another plugin or framework has modified or stripped the Unity player loop, removing standard subsystem types. Running on a Unity version whose internal player loop structure differs from what UniTask expects.
Common situations: Another asset (e.g., a custom game framework) rebuilds the player loop from scratch and omits standard subsystems. Unity beta/alpha versions with restructured player loop. A stripped or custom player runtime. Scripting define symbols or platform settings that alter the player loop.
Related errors
- Target playerLoopTiming is not injected. Please check Player
- Detected invalid initialization(use 'default'), only to crea
AI-assisted analysis of Cysharp/UniTask@ceac8d6946 (2026-08-13).
Data as JSON: /api/errors/24f6eb953aa1270d.
Report an issue: GitHub.