Exemplo n.º 1
0
        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);
 }
Exemplo n.º 3
0
        public override IAutoObject <T> Take()
        {
            IAutoObject <T> obj = base.Take();

            _usingList.Add(obj);
            obj.ResetObject();
            return(obj);
        }
Exemplo n.º 4
0
 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--;
         }
     }
 }
Exemplo n.º 5
0
 public void UnactivateObject(IAutoObject <GameObject> obj)
 {
     //某些情况下比如销毁场景时, 可能走到这一步时对象池已经被销毁, 这里将报错去除
     try
     {
         //将回收的对象作为当前对象的子对象, 方便折叠进行查看
         obj.GetObject().transform.SetParent(_poolGameObject.transform);
     }
     catch (Exception exception)
     {
     }
     //设置为不活跃
     obj.GetObject().SetActive(false);
 }
Exemplo n.º 6
0
 public void DestroyObject(IAutoObject <GameObject> obj)
 {
     GameObject.Destroy(obj.GetObject());
 }
Exemplo n.º 7
0
 public void ActivateObject(IAutoObject <GameObject> obj)
 {
     obj.GetObject().SetActive(true);
 }
Exemplo n.º 8
0
 public override void Restore(IAutoObject <T> obj)
 {
     base.Restore(obj);
     _usingList.Remove(obj);
 }
 public virtual void Restore(IAutoObject <GameObject> obj)
 {
     _pool.Restore(obj);
 }