예제 #1
0
        public TypeConstrainedPool(DynamicPool <TT> .Creater creater)
            : base(creater)
        {
#if UNITY_EDITOR
            if (typeof(TT) == typeof(UnityEngine.Object) || typeof(TT).IsSubclassOf(typeof(UnityEngine.Object)))
            {
                throw new Exception("Cannot create a GlobalPool of Unity Objects.");
            }
#endif
        }
예제 #2
0
    DynamicPool <EffectInstance> GetPoolFor(GameObject prefab)
    {
        if (prefab == null)
        {
            prefab = noPrefabDummy;
        }

        if (!prefabToEffectPool.ContainsKey(prefab))
        {
            var pool = new DynamicPool <EffectInstance>(() =>
            {
                var go  = new GameObject("EFX");
                var efx = go.AddComponent <EffectInstance>();

                var visualRoot = GameObject.Instantiate(prefab);
                visualRoot.transform.parent = go.transform;
                efx.visualRoot = visualRoot.transform;

                efx.Setup();
                efx.Reset(effect: null);
                efx.gameObject.SetActive(false);
                return(efx);
            });

            pool.onFree = (EffectInstance efx) =>
            {
                efx.Reset(effect: null);
                efx.transform.parent = instance.transform;
                efx.gameObject.SetActive(false);
            };

            prefabToEffectPool[prefab] = pool;
        }

        return(prefabToEffectPool[prefab]);
    }