/// <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); }
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)); } }
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); }
/// <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); }); }
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); } }