Esempio n. 1
0
        /// <summary>
        /// 用于解绑回调
        /// </summary>
        public void RemoveCallback(string assetName, PrefabLoadCallback callFun)
        {
            if (callFun == null)
            {
                return;
            }

            PrefabObject prefabObj = null;

            if (loadedList.ContainsKey(assetName))
            {
                prefabObj = loadedList[assetName];
            }

            if (prefabObj != null)
            {
                int index = prefabObj.CallbackList.IndexOf(callFun);

                if (index >= 0)
                {
                    prefabObj.RefCount--;
                    prefabObj.CallbackList.RemoveAt(index);
                    prefabObj.CallParentList.RemoveAt(index);

                    if (index < prefabObj.LockCallbackCount) // 说明是加载回调过程中解绑回调,需要降低lock个数
                    {
                        prefabObj.LockCallbackCount--;
                    }
                }

                if (prefabObj.RefCount < 0)
                {
                    string errormsg = string.Format("PrefabLoadMgr Destroy refCount error ! assetName:{0}", prefabObj.AssetName);
                    Debug.LogError(errormsg);
                    return;
                }

                if (prefabObj.RefCount == 0)
                {
                    loadedList.Remove(prefabObj.AssetName);

                    assetLoadMgr.Unload(prefabObj.Asset);

                    prefabObj.Asset = null;
                }
            }
        }
Esempio n. 2
0
        /// <summary>
        /// 异步实例化资源
        /// </summary>
        /// <param name="assetName"></param>
        public void LoadAsync(string assetName, PrefabLoadCallback callFun, Transform parent)
        {
            PrefabObject prefabObj = null;

            if (loadedList.ContainsKey(assetName))
            {
                prefabObj = loadedList[assetName];
                prefabObj.CallbackList.Add(callFun);
                prefabObj.CallParentList.Add(parent);
                prefabObj.RefCount++;

                if (prefabObj.Asset != null)
                {
                    loadedAsyncList.Add(prefabObj);
                }

                return;
            }

            prefabObj = new PrefabObject()
            {
                AssetName = assetName, RefCount = 1
            };
            prefabObj.CallbackList.Add(callFun);
            prefabObj.CallParentList.Add(parent);

            loadedList.Add(assetName, prefabObj);

            assetLoadMgr.LoadAsync(assetName, (string name, Object obj) =>
            {
                prefabObj.Asset = obj;

                prefabObj.LockCallbackCount = prefabObj.CallbackList.Count;

                DoInstanceAssetCallback(prefabObj);
            }
                                   );
        }