示例#1
0
 /// <summary>
 /// コンストラクタ <see cref="UnityObjectPool{T}" /> class.
 /// </summary>
 /// <param name="capacity">プール可能数</param>
 /// <param name="initCount">最初にプールするオブジェクト数</param>
 /// <param name="createDelegate">プールオブジェクトを作る処理</param>
 /// <param name="collectingPredicate">オブジェクトの回収条件</param>
 /// <param name="preparingToGetAction">プールされているオブジェクトを取得する前に行う処理</param>
 /// <param name="settlingAfterCollectingAction">オブジェクトの改修後に行う処理</param>
 /// <param name="settlingAfterRemovingAction">オブジェクトプールから取り除いた後に行う処理</param>
 public UnityObjectPool(int capacity, int initCount, ObjectPool <T> .CreateDelegate createDelegate, Predicate <T> collectingPredicate, Action <T> preparingToGetAction = null, Action <T> settlingAfterCollectingAction = null, Action <T> settlingAfterRemovingAction = null)
 {
     this.objectPool = new ObjectPool <Object.UnityReference <T> >(capacity, initCount,
                                                                   this.ProcessCreateDelegate(createDelegate),
                                                                   UnityObjectPool <T> .ProcessPredicate(collectingPredicate, true),
                                                                   UnityObjectPool <T> .ProcessAction(preparingToGetAction),
                                                                   UnityObjectPool <T> .ProcessAction(settlingAfterCollectingAction),
                                                                   UnityObjectPool <T> .ProcessAction(settlingAfterRemovingAction));
 }
示例#2
0
        /// <summary>
        /// プールされているオブジェクトを取得する
        /// </summary>
        /// <param name="advancedSettlingAfterCollectingAction">追加の回収後処理</param>
        /// <returns>プールされているオブジェクト</returns>
        public T Get(Action <T> advancedSettlingAfterCollectingAction = null)
        {
            T obj = null;

            while (obj == null)
            {
                var gottenRef = this.objectPool.Get(UnityObjectPool <T> .ProcessAction(advancedSettlingAfterCollectingAction));
                obj = gottenRef.target;
                if (obj == null)
                {
                    this.RemoveObject(gottenRef);
                }
            }

            return(obj);
        }