Ejemplo n.º 1
0
    /// <summary>
    /// 异步加载资源逻辑
    /// </summary>
    /// <param name="path"></param>
    /// <param name="assetType"></param>
    /// <param name="callBack"></param>
    /// <returns></returns>
    private IEnumerator LoadAssetsIEnumerator(string path, Type assetType, CallBack <Object> callBack)
    {
        yield return(LoadAssetsIDependencieEnumerator(path));

        if (assetsCaches.ContainsKey(path))
        {
            AssetsData assets = assetsCaches[path];
            assets.refCount++;
            AssetsUnloadHandler.MarkUseAssets(assets, loader.IsHaveDependencies(path));
            if (callBack != null)
            {
                callBack(assets.Assets[0]);
            }
        }
        else
        {
            yield return(loader.LoadAssetsIEnumerator(path, assetType, (assets) =>
            {
                assetsCaches.Add(path, assets);

                assets.refCount++;
                AssetsUnloadHandler.MarkUseAssets(assets, loader.IsHaveDependencies(path));
                if (callBack != null)
                {
                    callBack(assets.Assets[0]);
                }
            }));
        }
        yield return(0);
    }
Ejemplo n.º 2
0
    public AssetsData LoadAssetsLogic(string path, CallBackR <bool> checkContainsAssets, CallBackR <AssetsData, string> loadMethod)
    {
        LoadAssetsDependencie(path);
        AssetsData assets = null;

        if (checkContainsAssets())
        {
            assets = assetsCaches[path];
        }
        else
        {
            assets = loadMethod(path);
            if (assets == null)
            {
                Debug.LogError("资源加载失败:" + path);
                return(assets);
            }
            else
            {
                if (assetsCaches.ContainsKey(path))
                {
                    List <Object> asList = new List <Object>(assetsCaches[path].Assets);
                    foreach (var item in assets.Assets)
                    {
                        if (!asList.Contains(item))
                        {
                            asList.Add(item);
                        }
                    }
                    assetsCaches[path].Assets = asList.ToArray();
                    assets = assetsCaches[path];
                }
                else
                {
                    if (useCache)
                    {
                        assetsCaches.Add(path, assets);
                    }
                }
            }
        }
        if (useCache)
        {
            assets.refCount++;
            AssetsUnloadHandler.MarkUseAssets(assets, loader.IsHaveDependencies(path));
        }
        return(assets);
    }
Ejemplo n.º 3
0
    private static GameObject GetNewObject(bool isAlwaysNew, string objName, GameObject prefab, GameObject parent = null, bool isSetActive = true)
    {
        GameObject go   = null;
        string     name = objName;

        if (string.IsNullOrEmpty(name))
        {
            name = prefab.name;
        }

        if (!isAlwaysNew && IsExist(name))
        {
            if (!recyclePools.ContainsKey(name))
            {
                if (prefab != null)
                {
                    go = ObjectInstantiate(prefab, parent);
                }
                else
                {
                    go = NewGameObject(name, parent);
                }
            }
            else
            {
                objIDs.Clear();
                objIDs.AddRange(recyclePools[name].Keys);
                int id = objIDs[0];
                go = recyclePools[name][id];
                recyclePools[name].Remove(id);
                if (recyclePools[name].Count == 0)
                {
                    recyclePools.Remove(name);
                }
            }
        }
        else
        {
            if (prefab == null && !string.IsNullOrEmpty(objName))
            {
                go = NewGameObject(name, parent);
            }
            else if (prefab != null && string.IsNullOrEmpty(objName))
            {
                go = ObjectInstantiate(prefab, parent);
            }
        }
        if (go == null)
        {
            Debug.LogError("GameObjectManager 加载失败:" + name);
            return(go);
        }
        if (createPools.ContainsKey(name))
        {
            createPools[name].Add(go.GetInstanceID(), go);
        }
        else
        {
            createPools.Add(name, new  Dictionary <int, GameObject>()
            {
                { go.GetInstanceID(), go }
            });
        }
        AssetsUnloadHandler.MarkUseAssets(name);
        PoolObject po = go.GetComponent <PoolObject>();

        if (po)
        {
            try
            {
                po.OnFetch();
            }
            catch (Exception e)
            {
                Debug.LogError("GetNewObject Error: " + e.ToString());
            }
        }

        if (isSetActive)
        {
            go.SetActive(true);
        }

        if (parent == null)
        {
            go.transform.SetParent(null);
        }
        else
        {
            go.transform.SetParent(parent.transform);
        }
        return(go);
    }