protected virtual void UnregisterRoutine()
    {
        UpdateLoopSettings settings;

        settings = UpdateLoopSettings_CoreUpdate;
        settings.ShouldBeRegistered   = false;
        UpdateLoopSettings_CoreUpdate = settings;

        settings = UpdateLoopSettings_CoreLateUpdate;
        settings.ShouldBeRegistered       = false;
        UpdateLoopSettings_CoreLateUpdate = settings;

        settings = UpdateLoopSettings_CoreFixedUpdate;
        settings.ShouldBeRegistered        = false;
        UpdateLoopSettings_CoreFixedUpdate = settings;

        //For editor lazy initialization.
#if UNITY_EDITOR
        CoreUpdateLoop.TryInitialize();
        CoreFixedUpdateLoop.TryInitialize();
        CoreLateUpdateLoop.TryInitialize();
#endif

        CoreUpdateLoop.Instance.NeedsRemovals      |= UpdateLoopSettings_CoreUpdate.IsValid;
        CoreLateUpdateLoop.Instance.NeedsRemovals  |= UpdateLoopSettings_CoreLateUpdate.IsValid;
        CoreFixedUpdateLoop.Instance.NeedsRemovals |= UpdateLoopSettings_CoreFixedUpdate.IsValid;
    }
    public static void TryInitialize()
    {
        if (IsInited)
        {
            return;
        }

        IsInited = true;
        Instance = new CoreFixedUpdateLoop();
        Instance.RegisterLoopToUpdateManager();

        PollingLoops.CoreFixedUpdatePoller.Hook();
    }
    protected virtual void RegisterRoutine()
    {
        CoreInitSetup();

        //For editor lazy initialization.
#if UNITY_EDITOR
        CoreUpdateLoop.TryInitialize();
        CoreFixedUpdateLoop.TryInitialize();
        CoreLateUpdateLoop.TryInitialize();
#endif

        CoreUpdateLoop.Instance.EnqueueBehaviour(this);
        CoreLateUpdateLoop.Instance.EnqueueBehaviour(this);
        CoreFixedUpdateLoop.Instance.EnqueueBehaviour(this);
    }