当列表项的父级未处于活动状态时生成 ObjectDisposedException

ObjectDisposedException generates when the list item's parent is not active

提问人:sarthak musale 提问时间:9/5/2023 最后编辑:sarthak musale 更新时间:9/5/2023 访问量:102

问:

我正在使用 vuforia。OnTargetFound 父对象将被 setActive true,一个列表将填充其子对象的引用,a 将开始将某些计算过程保存在 while 循环和 OnTargetLost 中,该过程将以 stopCoroutine 结束,列表将被清除,父对象将被设置为非活动状态。通过该过程,正在访问列表。

问题在于,即使目标丢失,协程也会自行完成,然后停止。但在此之前,父对象处于非活动状态,并且进程正在访问列表项,“
ObjectDisposedException: SerializedProperty repeatList.Array.data[0] has disappeared!”” 正在生成此错误。

我怎样才能摆脱这个问题?? 当标记被跟踪时,该过程必须处于循环中。

我试过: 1.在协程中使用waitForSecond 2.使用break语句(但是过程很长,所以不知道在哪里中断) 3.尝试和捕捉 4.使用标志和条件 5.调用重复 6.使用数组代替列表 7.设置执行顺序 8.使用委托、操作、事件 9.async 等待

代码如下:

private IEnumerator DoCalculation()
    {
        while (doCalculation)
        {
            yield return new WaitForSeconds(0.8f);
            yield return StartCoroutine(Calculation());
        }
    }

private IEnumerator Calculation()
    {
       if (!AreAllOptionsTracked())
        {
            answerImg.gameObject.SetActive(false);
            if (model != null)
            {
                model.SetActive(false);
            }
            yield break;
        }

        isCalculationOn = true;
        if (answerObj != null && answerObj.activeInHierarchy)
        {
            SetRepeatPos();
        }
        bool isCorrect = CheckOptionOrder();
        isCalculationOn = false;   
    }

private void ClearGame()
    {
        doCalculation = false;
        isCalculationOn = false;
        StartCoroutine(ClearAll());
    }

private IEnumerator ClearAll()
    {
        yield return new WaitForSeconds(0.5f);
        if (isCalculationOn)
        {
            yield return new WaitForSeconds(0.7f);
        }
        if (!isCalculationOn && answerObj != null)
        {
            answerObj.SetActive(false);
            answerObj = null;
        }
        repeatList.Clear();
    }

这里的“answerObj”是父对象,“repeatList”是其子对象的列表。“SetRepeatPos()”正在使用列表项

列出 unity-game-engine while-loop 协程 vuforia

评论

0赞 derHugo 9/5/2023
你能显示相应的代码吗?
0赞 derHugo 9/5/2023
听起来像是一些Inspector / EditorWindow问题
0赞 sarthak musale 9/5/2023
嘿@derHugo,我已经用代码更新了我的问题。请检查一下。
0赞 derHugo 9/5/2023
正如我所说,这个错误似乎与您的组件的检查器以及它如何尝试在检查器中绘制项目有关......如果相应的对象处于非活动状态,则协程实际上应该“暂停”repeatList
0赞 sarthak musale 9/5/2023
就是这样,协程没有被暂停或停止。相反,它正在完成代码,如果条件为 false,则不会重复。

答: 暂无答案