[Unity实战]SetNativeObject:_fairygui DisplayObject is still in use but GameObject was disposed.

420 阅读1分钟

fairygui的特殊问题SetNativeObject:_fairygui DisplayObject is still in use but GameObject was disposed.

SetNativeObject使用背景

当使用unity+fairygui时,用到了SetNativeObject.
将一个unity-spine动画挂载在fairygui的图形节点上

在这里插入图片描述

在这里插入图片描述

SetNativeObject问题发现:

我尝试将物体Fairygui-Dispose销毁时,多次执行(10次以上),报错了…

_fairygui DisplayObject is still in use but GameObject was disposed.)

我仔细看了官方的说明:
unity3d-fairygui
在这里插入图片描述

问题解决

官方的建议是一开始直接初始化好这个Wrapper,然后自己维护需要wrapTarget的GameObject…
然后不使用dispose回收该对象…

using System;
using FairyGUI;
using UnityEngine;

namespace DefaultNamespace
{
    public class Test : MonoBehaviour
    {
        private GoWrapper wrapper = null;
        private GameObject go = null;
        private GGraph gg = GRoot.inst.GetChild("GGraph").asGraph;

        /// <summary>
        /// 加载prefab
        /// </summary>
        private void LoadPrefab()
        {
            go = GameObject.Instantiate(Resources.Load("Assets/X.prefab") as GameObject);
            if (wrapper == null)
            {
                wrapper = new GoWrapper(go);
            }
            else
            {
                wrapper.wrapTarget = go;
            }

            gg.SetNativeObject(wrapper);
        }

        /// <summary>
        /// 替换prefab
        /// </summary>
        /// <param name="replaceGo"></param>
        private void ReplaceWrapTarget(GameObject replaceGo)
        {
            if (wrapper != null)
            {
                if (wrapper.wrapTarget != null)
                {
                    Destroy(wrapper.wrapTarget);
                }

                wrapper.wrapTarget = replaceGo;
            }
        }
    }
}