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