コード例 #1
0
 // 立即销毁对象
 public static void DestroyImmediate(UnityEngine.Object obj)
 {
     if (obj as GameObject)
     {
         (obj as GameObject).transform.SetParent(null);      // 这个仅仅是移除场景中
         UtilApi.DestroyTexMat(obj as GameObject);
     }
     UnityEngine.Object.DestroyImmediate(obj);
 }
コード例 #2
0
 // bInstance 是通过 Instance 实例画出来的,否则是直接加载的磁盘资源,这种资源是受保护的,不能设置任何里面的值
 public static void DestroyImmediate(UnityEngine.Object obj, bool allowDestroyingAssets, bool bInstance = true)
 {
     if (obj as GameObject)
     {
         if (bInstance)
         {
             (obj as GameObject).transform.SetParent(null);      // 这个仅仅是移除场景中
             UtilApi.DestroyTexMat(obj as GameObject);
         }
     }
     GameObject.DestroyImmediate(obj, allowDestroyingAssets);
 }
コード例 #3
0
 // 销毁对象
 public static void Destroy(UnityEngine.Object obj)
 {
     if (obj != null)
     {
         if (obj as GameObject)
         {
             UtilApi.DestroyComponent(obj as GameObject);
             (obj as GameObject).transform.SetParent(null);      // 这个仅仅是移除场景中
             UtilApi.DestroyTexMat(obj as GameObject);
         }
         UnityEngine.Object.Destroy(obj);
         obj = null;
     }
     else
     {
         Ctx.m_instance.m_logSys.log("Destroy Object is null");
     }
 }
コード例 #4
0
        // 纹理材质都是实例化,都对资源有引用计数,深度遍历释放资源
        public static void DestroyTexMat(UnityEngine.GameObject go_)
        {
            Material mat = go_.GetComponent <Material>();

            if (mat != null)
            {
                if (mat.mainTexture != null)
                {
                    UtilApi.UnloadAsset(mat.mainTexture);
                    mat.mainTexture = null;
                }
                UtilApi.UnloadAsset(mat);
                mat = null;
            }

            Image image = go_.GetComponent <Image>();

            if (image != null)
            {
                if (image.sprite != null)
                {
                    if (image.sprite.texture != null)
                    {
                        UtilApi.UnloadAsset(image.sprite.texture);
                    }

                    image.sprite = null;
                }

                image = null;
            }

            int       childCount = go_.transform.childCount;
            int       idx        = 0;
            Transform childTrans = null;

            for (idx = 0; idx < childCount; ++idx)
            {
                childTrans = go_.transform.GetChild(idx);
                UtilApi.DestroyTexMat(childTrans.gameObject);
            }
        }