コード例 #1
0
 private void OnResLoadCache(Resource res, string path)
 {
     if (res.isSucc)
     {
         ResourceObjectQueue resQueue = m_dicGO[path];
         resQueue.prefab = res.GetAsset(path);
         resQueue.isDone = true;
         List <CacheCallbackStruct> lstCallbackStruct = null;
         if (m_dicCacheCallback.TryGetValue(path, out lstCallbackStruct))
         {
             while (lstCallbackStruct.Count > 0)
             {
                 var callbackStruct = lstCallbackStruct[0];
                 lstCallbackStruct.RemoveAt(0);
                 if (!callbackStruct.isPrefab)
                 {
                     for (int i = 0; i < callbackStruct.count; i++)
                     {
                         var go = GetGameObject(resQueue.prefab, path);
                         SaveObject(path, go);
                     }
                 }
                 callbackStruct.callback.Invoke(path);
             }
         }
     }
     else
     {
         CLog.LogError("加载GameObject资源" + path + "失败");
     }
 }
コード例 #2
0
        private IEnumerator LoadAssetAndCallback(Resource res, string path)
        {
            ResourceObjectQueue resQueue = m_dicGO[path];

            if (resQueue.prefab == null)
            {
                IEnumerator enumerator = resQueue.res.GetAssetAsync(path, OnLoadAsset);
                while (enumerator != null && enumerator.MoveNext())
                {
                    yield return(null);
                }
                //yield return resQueue.res.GetAssetAsync(path, OnLoadAsset);
            }
            resQueue.isDone = true;
            List <GameObjectPoolCallbackStruct> lstCallback = null;

            if (m_dicCallback.TryGetValue(path, out lstCallback))
            {
                while (lstCallback.Count > 0)
                {
                    var callback = lstCallback[0];
                    lstCallback.RemoveAt(0);
                    UnityEngine.Object go = null;
                    if (callback.isPrefab)
                    {
                        go = resQueue.prefab;
                    }
                    else
                    {
                        if (resQueue.queue.Count > 0)
                        {
                            go = resQueue.queue.Dequeue();
                        }
                        else
                        {
                            go = GetGameObject(resQueue.prefab, path);
                        }
                        ((GameObject)go).SetActive(true);
                    }
                    callback.callback.Invoke(path, go);
                }
            }
        }