/// <summary> /// 同步加载 /// </summary> /// <param name="path"></param> /// <param name="bClear"></param> /// <returns></returns> public GameObject InstantiateObject(string path, bool setSceneObj = false, bool bClear = true) { uint crc = CRC32.GetCrc32(path); ResouceObj resouceObj = GetObjectFromPool(crc); if (resouceObj == null) { resouceObj = m_ResourceObjClassPool.Spawn(true); resouceObj.m_Crc = crc; resouceObj.m_bClear = bClear; //ResouceManager提供加载方法 resouceObj = ResourceManager.Instance.LoadResource(path, resouceObj); if (resouceObj.m_ResItem.m_Obj != null) { resouceObj.m_CloneObj = GameObject.Instantiate(resouceObj.m_ResItem.m_Obj) as GameObject; } } if (setSceneObj) { resouceObj.m_CloneObj.transform.SetParent(SceneTrs, false); } int tempID = resouceObj.m_CloneObj.GetInstanceID(); if (!m_ResouceObjDic.ContainsKey(tempID)) { m_ResouceObjDic.Add(tempID, resouceObj); } return(resouceObj.m_CloneObj); }
/// <summary> /// 添加一个节点到头部 /// </summary> /// <param name="t"></param> /// <returns></returns> public DoubleLinkedListNode <T> AddToHeader(T t) { DoubleLinkedListNode <T> pList = m_DoubleLinkNodePool.Spawn(true); pList.next = null; pList.prev = null; pList.t = t; return(AddToHeader(pList)); }
/// <summary> /// 加载单个assetbundle根据名字 /// </summary> /// <param name="name"></param> /// <returns></returns> private AssetBundle LoadAssetBundle(string name) { AssetBundleItem item = null; uint crc = CRC32.GetCrc32(name); if (!m_AssetBundleItemDic.TryGetValue(crc, out item)) { AssetBundle assetBundle = null; string fullPath = Application.streamingAssetsPath + "/" + name; assetBundle = AssetBundle.LoadFromFile(fullPath); if (assetBundle == null) { DebugPlus.LogError(" Load AssetBundle Error:" + fullPath); } item = m_AssetBundleItemPool.Spawn(true); item.assetBundle = assetBundle; item.RefCount++; m_AssetBundleItemDic.Add(crc, item); } else { item.RefCount++; } return(item.assetBundle); }
/// <summary> /// 异步加载资源(仅仅是不需要实例化的资源,例如音频,图片等等) /// </summary> public void AsyncLoadResource(string path, OnAsyncObjFinish dealFinish, LoadResPriority priority, bool isSprite = false, object param1 = null, object param2 = null, object param3 = null, uint crc = 0) { if (crc == 0) { crc = CRC32.GetCrc32(path); } ResouceItem item = GetCacheResouceItem(crc); if (item != null) { if (dealFinish != null) { dealFinish(path, item.m_Obj, param1, param2, param3); } return; } //判断是否在加载中 AsyncLoadResParam para = null; if (!m_LoadingAssetDic.TryGetValue(crc, out para) || para == null) { para = m_AsyncLoadResParamPool.Spawn(true); para.m_Crc = crc; para.m_Path = path; para.m_Sprite = isSprite; para.m_Priority = priority; m_LoadingAssetDic.Add(crc, para); m_LoadingAssetList[(int)priority].Add(para); } //往回调列表里面加回调 AsyncCallBack callBack = m_AsyncCallBackPool.Spawn(true); callBack.m_DealObjFinish = dealFinish; callBack.m_Param1 = param1; callBack.m_Param2 = param2; callBack.m_Param3 = param3; para.m_CallBackList.Add(callBack); }