Unity场景二次加载时Invoke()触发异常,求解决方案
问题:静态事件Invoke在场景二次加载时触发异常
我在Unity协程中调用静态事件的Invoke方法,代码如下:
private IEnumerator aguardarResultado() { while(!_rigidbody.IsSleeping()) { yield return null; } int numSorteado = 1; numSorteado = Vector3.Dot(Vector3.up, -transform.up) > 0.6f ? 6 : numSorteado; numSorteado = Vector3.Dot(Vector3.up, transform.forward) > 0.6f ? 3 : numSorteado; numSorteado = Vector3.Dot(Vector3.up, -transform.forward) > 0.6f ? 4 : numSorteado; numSorteado = Vector3.Dot(Vector3.up, transform.right) > 0.6f ? 5 : numSorteado; numSorteado = Vector3.Dot(Vector3.up, -transform.right) > 0.6f ? 2 : numSorteado; OnNumSorteado?.Invoke(numSorteado); horizontalLayoutGroup.enabled = true; transform.localScale = new Vector3(0.01f, 0.01f, 0.01f); }
其中OnNumSorteado是Dado3D脚本中声明的静态事件:
public static event System.Action<int> OnNumSorteado;
首次打开游戏场景时代码运行正常,但二次及之后加载该场景时,OnNumSorteado?.Invoke(numSorteado);行触发报错,该行之后的代码无法执行。报错信息如下:
MissingReferenceException: The object of type 'Image' has been destroyed but you are still trying to access it. Your script should either check if it is null or you should not destroy the object. Ludo3DPowers.recebeValorDoDado3D (System.Int32 numSorteado) (at Assets/SCRIPTS/[Ludo3DPowers_e_Poderes]/Ludo3DPowers/Ludo3DPowers.cs:890) Dado3D+<awaitResult>d__58.MoveNext () (at Assets/SCRIPTS/Dado3D_ItemDadoNoCanvas/Dado3D.cs:295) UnityEngine.SetupCoroutine.InvokeMoveNext(System.Collections.IEnumerator enumerator, System.IntPtr returnValueAddress) (at <685c48cf8f0b48abb797275c046dda6a>:0)
我认为Image的MissingReferenceException是Invoke执行异常导致的后果,而非问题根源,想请教Invoke出现了什么问题以及对应的解决方法。
内容的提问来源于stack exchange,提问作者WLCS
相关产品推荐
相关产品推荐

