private ObjectPoolInstance CreateInstanceInGroup(ObjectPoolGroup group) { var go = Instantiate(group.PrefabObject, transform, false); go.SetActive(false); go.name += "_" + group.PooledInstances.Count; go.transform.parent = group.Parent; var iPooleable = go.GetComponent(typeof(IPooleableObject)) as IPooleableObject; if (iPooleable == null) { Debug.LogError("IPooleableObject interface not found in " + go.name); return(null); } var instance = new ObjectPoolInstance { IsUsed = false, Instance = go, PooleableInstance = iPooleable }; group.PooledInstances[instance.Instance.GetInstanceID()] = instance; return(instance); }
public void ReturnObject <T>(string path, T obj) where T : UnityEngine.Object { var type = typeof(T); ObjectPoolGroup group = null; if (objectPoolGroupDic.ContainsKey(type)) { group = objectPoolGroupDic[type]; group.ReturnObj(path, obj); } else { Logx.LogWarning("the type is not found : " + type.ToString()); } }
public void GetObject <T>(string path, Action <UnityEngine.Object> callback) { var type = typeof(T); ObjectPoolGroup group = null; if (objectPoolGroupDic.ContainsKey(type)) { group = objectPoolGroupDic[type]; } else { group = new ObjectPoolGroup(); objectPoolGroupDic.Add(type, group); } group.GetObject(path, callback); }
private void Awake() { Instance = this; _poolGroup = new List <ObjectPoolGroup>(); foreach (var e in _poolEntries) { var groupContainer = new GameObject(e.PrefabObject.name); groupContainer.transform.parent = transform; var group = new ObjectPoolGroup { PrefabObject = e.PrefabObject, PooledInstances = new Dictionary <int, ObjectPoolInstance>(), Parent = groupContainer.transform }; for (int i = 0; i < e.PrefabDefaultInstances; i++) { CreateInstanceInGroup(group); } _poolGroup.Add(group); } }