Example #1
0
    public static void CreatePool(GameObject prefab, int initialPoolSize, string pathOrAddress)
    {
        if (prefab != null && !instance.pooledObjects.ContainsKey(prefab))
        {
            if (!instance.ObjectAndPathDic.ContainsKey(prefab))
            {
                instance.ObjectAndPathDic.Add(prefab, pathOrAddress);
            }

            var list = new List <GameObject>();
            instance.pooledObjects.Add(prefab, list);
            if (initialPoolSize > 0)
            {
                bool active = prefab.activeSelf;
                prefab.SetActive(false);
                Transform parent = instance.transform;
                while (list.Count < initialPoolSize)
                {
                    GameObject obj  = null;
                    string     path = string.Empty;
                    instance.ObjectAndPathDic.TryGetValue(prefab, out path);
                    if (string.IsNullOrEmpty(path))
                    {
                        obj = Instantiate(prefab);
                    }
                    else
                    {
                        obj = (GameObject)AssetUtil.InstantiateAsset(path, prefab);
                    }


                    obj.transform.SetParent(parent, false);
                    list.Add(obj);
                }
                prefab.SetActive(active);
            }
        }
    }
Example #2
0
    public static GameObject Spawn(GameObject prefab, Transform parent, Vector3 position, Quaternion rotation)
    {
        List <GameObject> list;
        Transform         trans;
        GameObject        obj;

        if (instance.pooledObjects.TryGetValue(prefab, out list))
        {
            obj = null;
            if (list.Count > 0)
            {
                while (obj == null && list.Count > 0)
                {
                    obj = list[0];
                    list.RemoveAt(0);
                }
                if (obj != null)
                {
                    trans = obj.transform;
                    trans.SetParent(parent, false);
                    trans.localPosition = position;
                    trans.localRotation = rotation;
                    obj.SetActive(true);
                    instance.spawnedObjects.Add(obj, prefab);
                    return(obj);
                }
            }

            string path = string.Empty;
            instance.ObjectAndPathDic.TryGetValue(prefab, out path);
            if (string.IsNullOrEmpty(path))
            {
                obj = Instantiate(prefab);
            }
            else
            {
                obj = (GameObject)AssetUtil.InstantiateAsset(path, prefab);
            }

            trans = obj.transform;
            trans.SetParent(parent, false);
            trans.localPosition = position;
            trans.localRotation = rotation;
            instance.spawnedObjects.Add(obj, prefab);
            return(obj);
        }
        else
        {
            string path = string.Empty;
            instance.ObjectAndPathDic.TryGetValue(prefab, out path);
            if (string.IsNullOrEmpty(path))
            {
                CreatePool(prefab, 0, string.Empty);
                obj = Instantiate(prefab);
            }
            else
            {
                CreatePool(prefab, 0, path);
                obj = (GameObject)AssetUtil.InstantiateAsset(path, prefab);
            }

            trans = obj.transform;
            trans.SetParent(parent, false);
            trans.localPosition = position;
            trans.localRotation = rotation;
            instance.spawnedObjects.Add(obj, prefab);
            return(obj);

            //obj = Instantiate(prefab);
            //trans = obj.GetComponent<Transform>();
            //trans.SetParent(parent);
            //trans.localPosition = position;
            //trans.localRotation = rotation;
            //return obj;
        }
    }