Here is my code. I check .isActiveAndEnabled before calling StartCoroutine. Still I get that error.
public static class MonoBehaviourRunDelayedExt {
public static IEnumerator DelayedCoroutine(float delay, Action a) {
yield return new WaitForSeconds(delay);
a();
}
public static Coroutine RunDelayed(this MonoBehaviour mono, float delay, Action a) {
if (mono == null || !mono.isActiveAndEnabled) return null;
// The following line prints error message: Coroutine couldn't be started because the the game object 'xxx' is inactive!
return mono.StartCoroutine(DelayedCoroutine(delay, a));
}
}
It happens when changing scene or stopping play mode in Unity Editor. A monobehaviour calls RunDelayed
and subsequently StartCoroutine
in its OnDisable
callback.
Any ideas why this happens? I’m on 2019.4.23f1.
Here is the full stack trace (I doubt it contains anything useful).
Coroutine couldn't be started because the the game object 'VisualGameEngine' is inactive!
UnityEngine.MonoBehaviour:StartCoroutine (System.Collections.IEnumerator)
NoSuchStudio.Common.MonoBehaviourRunDelayedExt:RunDelayed (UnityEngine.MonoBehaviour,single,System.Action) (at Assets/Plugins/nosuchstudio/Common/Runtime/MonoBehaviourRunDelayedExt.cs:48)
NoSuchStudio.Common.NoSuchMonoBehaviour:RunDelayed (single,System.Action) (at Assets/Plugins/nosuchstudio/Common/Runtime/NoSuchMonoBehaviour.cs:83)
CasinoPersia.Shelem.VisualGameEngine:StepDeferred (single) (at Assets/Scripts/Shelem/Runtime/VisualGameEngine.cs:628)
CasinoPersia.Shelem.VisualGameEngine/LocalGameAgent:b__7_0 () (at Assets/Scripts/Shelem/Runtime/VisualGameEngine.cs:878)
CasinoPersia.Shelem.VisualGameEngine/<>c__DisplayClass77_0:b__0 (CasinoPersia.View.VisualCardCollection) (at Assets/Scripts/Shelem/Runtime/VisualGameEngine.cs:608)
CasinoPersia.View.VisualCardCollection/<>c__DisplayClass62_0:b__0 (UnityEngine.Events.UnityAction`1) (at Assets/Scripts/CasinoPersia/Runtime/view/VisualCardCollection.cs:237)
System.Collections.Generic.List`1<UnityEngine.Events.UnityAction`1>:ForEach (System.Action`1<UnityEngine.Events.UnityAction`1>)
CasinoPersia.View.VisualCardCollection:ProcessOneshots (CasinoPersia.View.VisualCardCollection) (at Assets/Scripts/CasinoPersia/Runtime/view/VisualCardCollection.cs:237)
CasinoPersia.View.VisualCardCollection:b__65_0 (CasinoPersia.View.VisualCardCollection,CasinoPersia.View.VisualAnimation/AnimationEventType) (at Assets/Scripts/CasinoPersia/Runtime/view/VisualCardCollection.cs:273)
UnityEngine.Events.UnityEvent`2:Invoke (CasinoPersia.View.VisualCardCollection,CasinoPersia.View.VisualAnimation/AnimationEventType)
CasinoPersia.View.VisualCardCollection:CardAnimationHandler (CasinoPersia.View.VisualAnimation,CasinoPersia.View.VisualAnimation/AnimationEventType) (at Assets/Scripts/CasinoPersia/Runtime/view/VisualCardCollection.cs:229)
UnityEngine.Events.UnityEvent`2:Invoke (CasinoPersia.View.VisualAnimation,CasinoPersia.View.VisualAnimation/AnimationEventType)
CasinoPersia.View.VisualAnimation:StopAnimation () (at Assets/Scripts/CasinoPersia/Runtime/view/VisualAnimation.cs:72)
CasinoPersia.View.VisualAnimation:OnDisable () (at Assets/Scripts/CasinoPersia/Runtime/view/VisualAnimation.cs:66)