public IAutoObject <GameObject> CreateObject(bool doActive) { GameObject go = GameObject.Instantiate(_gameObject) as GameObject; //对象切换场景时不被销毁 if (_dontDestroyOnLoad) { GameObject.DontDestroyOnLoad(go); } //取出预先绑定好的继承自 UnityAutoObject 的脚本 IAutoObject <GameObject> autoObject = go.GetComponent <T>(); if (autoObject == null) { throw new Exception("对象池生成的对象必须绑定继承自 UnityAutoObject 的脚本!"); } if (doActive) { this.ActivateObject(autoObject); } else { this.UnactivateObject(autoObject); } return(autoObject); }
public void UnactivateObject(IAutoObject <GameObject> obj) { //将回收的对象作为当前对象的子对象, 方便折叠进行查看 obj.GetObject().transform.SetParent(_poolGameObject.transform); //设置为不活跃 obj.GetObject().SetActive(false); }
public override IAutoObject <T> Take() { IAutoObject <T> obj = base.Take(); _usingList.Add(obj); obj.ResetObject(); return(obj); }
public virtual void CheckRestore() { for (int i = 0; i < _usingList.Count; i++) { IAutoObject <T> obj = _usingList[i]; obj.CheckRestore(); if (obj.restore) { this.Restore(obj); i--; } } }
public void UnactivateObject(IAutoObject <GameObject> obj) { //某些情况下比如销毁场景时, 可能走到这一步时对象池已经被销毁, 这里将报错去除 try { //将回收的对象作为当前对象的子对象, 方便折叠进行查看 obj.GetObject().transform.SetParent(_poolGameObject.transform); } catch (Exception exception) { } //设置为不活跃 obj.GetObject().SetActive(false); }
public void DestroyObject(IAutoObject <GameObject> obj) { GameObject.Destroy(obj.GetObject()); }
public void ActivateObject(IAutoObject <GameObject> obj) { obj.GetObject().SetActive(true); }
public override void Restore(IAutoObject <T> obj) { base.Restore(obj); _usingList.Remove(obj); }
public virtual void Restore(IAutoObject <GameObject> obj) { _pool.Restore(obj); }