Ejemplo n.º 1
0
    /// <summary>
    /// 同步Get对象
    /// </summary>
    /// <param name="path"></param>
    /// <param name="rType"></param>
    /// <param name="tactice"></param>
    /// <param name="poolNum"></param>
    /// <param name="poolSize"></param>
    /// <returns></returns>
    private GameObject InstantiateObjectSync(string path, ResourceType rType, PoolCreateTactice tactice = PoolCreateTactice.DynamicMaxSize, int poolNum = 1, int poolSize = 1)
    {
        Object asset = LoadResourceSync(path, rType);

        GamePoolMgr.instance.CreatePool(path, asset, tactice, poolNum, poolSize);

        GameObject gameObject = GamePoolMgr.instance.Give(path);

        if (gameObject != null)
        {
            gameObject.SetActive(true);
        }
        return(gameObject);
    }
Ejemplo n.º 2
0
    public void CreatePool(string path, Object asset, PoolCreateTactice tactice, int poolNum, int poolSize)
    {
        if (pools.ContainsKey(path))
        {
            return;
        }

        if (asset != null)
        {
            pools.Add(path, new GamePool(path, asset, tactice, poolNum, poolSize, path.Contains(PanelNameDefine.UIROOT)?null:GetpoolRootTransform()));
        }
        else
        {
            LogMgr.instance.Log(LogLevel.ERROR, LogTag.GamePool, string.Format("devindzhang create pool fail : check path-->{0}", path));
        }
    }
Ejemplo n.º 3
0
    public GamePool(string itemPath, UnityEngine.Object prefab, PoolCreateTactice tactice, int poolNum, int poolSize, Transform rooTransform)
    {
        poolSize = Mathf.Max(poolNum, poolSize);

        if (rooTransform == null)
        {
            poolParent = null;
        }
        else
        {
            poolParent = new GameObject(prefab.name + "_pool");

            poolParent.transform.parent = rooTransform;
        }


        switch (tactice)
        {
        case PoolCreateTactice.DynamicMaxSize:
            tactics = new GamePoolCreateDynamicMaxTactice();
            break;

        case PoolCreateTactice.FixedMaxSize:
            tactics = new InstaiatePoolCreateFixedMaxSizeTactice();
            break;

        case PoolCreateTactice.MaxSizeLoopUse:
            tactics = new GamePoolCreateMaxSizeLoopUseTactice();
            break;

        case PoolCreateTactice.ImmediatelyDestory:
            tactics = new GamePoolCreateImmediatelyDestoryTactice();
            break;

        default:
            LogMgr.instance.Log(LogLevel.ERROR, LogTag.GamePool, string.Format("devindzhang un catch case : {0}", tactice));
            break;
        }
        tactics.Create(itemPath, prefab, poolNum, poolSize, poolParent);
    }
Ejemplo n.º 4
0
    /// <summary>
    /// 异步Get资源
    /// </summary>
    /// <param name="path"></param>
    /// <param name="rType"></param>
    /// <param name="callback"></param>
    /// <param name="tactice"></param>
    /// <param name="poolNum"></param>
    /// <param name="poolSize"></param>
    private void InstantiateObjectAync(string path, ResourceType rType, System.Action <GameObject> callback, PoolCreateTactice tactice = PoolCreateTactice.DynamicMaxSize, int poolNum = 1, int poolSize = 1)
    {
        LoadResourceAsyn(path, rType, (asset) =>
        {
            GamePoolMgr.instance.CreatePool(path, asset, tactice, poolNum, poolSize);

            GameObject gameObject = GamePoolMgr.instance.Give(path);
            if (gameObject != null)
            {
                gameObject.SetActive(true);
            }
            callback(gameObject);
        });
    }
Ejemplo n.º 5
0
    public GameObject InstantiateGameObject(string path, Action <GameObject> callback, bool isAync, PoolCreateTactice tactice, int poolNum, int poolSize)
    {
        if (!isAync)
        {
            GameObject obj = InstantiateObjectSync(path, ResourceType.Prefab, tactice, poolNum, poolSize);
            if (callback != null)
            {
                callback(obj);
            }
            return(obj);
        }
        else
        {
            Action <GameObject> actions = (gObject) =>
            {
                if (callback != null)
                {
                    callback(gObject);
                }
                else
                {
                    LogMgr.instance.Log(LogLevel.ERROR, LogTag.ResourceMgr, string.Format("devindzhang InstantiateGameObject use Aync but no callback check code ?"));
                }
            };

            InstantiateObjectAync(path, ResourceType.Prefab, actions, tactice, poolNum, poolSize);
            return(null);
        }
    }