Ejemplo n.º 1
0
        /// <summary>
        /// 在加载资源前判断下是否已经使用相同类型加载器(避免一个物体同时使用多个加载器的Bug )加载一个资源,
        /// 如果新资源的URL 与以前的不同则以前的资源要减少引用
        /// </summary>
        /// <param name="url"></param>
        /// <param name="loader"></param>
        public void TryLoadAsset(string url, ApplicationLayerBaseLoader loader)
        {
            int  index = -1;
            bool isExitTypeOfLoader = false;

            for (int dex = 0; dex < m_LoadedResourceInfor.Count; ++dex)
            {
                if (m_LoadedResourceInfor[dex].m_Loader.GetType() == loader.GetType())
                {
                    isExitTypeOfLoader = true;
#if UNITY_EDITOR
                    if (index != -1)
                    {
                        Debug.LogError(string.Format("TryLoadAsset  {0}存在多个同类型的加载器{1} url= {2}", gameObject.name, loader.GetType(), loader.m_ResourcesUrl));
                        continue;
                    }
#endif
                    if (m_LoadedResourceInfor[dex].m_Url != url)
                    {
                        Debug.LogInfor("尝试使用同种加载器,加载不同的资源,卸载旧的资源");
                        m_LoadedResourceInfor[dex].m_Loader.ReduceReference(m_LoadedResourceInfor[dex].m_Loader, false);
                        index = dex;
#if !UNITY_EDITOR
                        break;
#endif
                    }
                }
            }

            if (index != -1)
            {
                m_LoadedResourceInfor.RemoveAt(index);
            }

            if (isExitTypeOfLoader == false || index != -1)
            {
                m_LoadedResourceInfor.Add(new LoaderHanderInfor(url, loader));
            }
        }
Ejemplo n.º 2
0
 public LoaderHanderInfor(string url, ApplicationLayerBaseLoader loader)
 {
     m_Url    = url;
     m_Loader = loader;
 }