Esempio n. 1
0
    private ObjectPoolInstance CreateInstanceInGroup(ObjectPoolGroup group)
    {
        var go = Instantiate(group.PrefabObject, transform, false);

        go.SetActive(false);
        go.name            += "_" + group.PooledInstances.Count;
        go.transform.parent = group.Parent;
        var iPooleable = go.GetComponent(typeof(IPooleableObject)) as IPooleableObject;

        if (iPooleable == null)
        {
            Debug.LogError("IPooleableObject interface not found in " + go.name);
            return(null);
        }

        var instance = new ObjectPoolInstance
        {
            IsUsed            = false,
            Instance          = go,
            PooleableInstance = iPooleable
        };

        group.PooledInstances[instance.Instance.GetInstanceID()] = instance;
        return(instance);
    }
    public void ReturnObject <T>(string path, T obj) where T : UnityEngine.Object
    {
        var             type  = typeof(T);
        ObjectPoolGroup group = null;

        if (objectPoolGroupDic.ContainsKey(type))
        {
            group = objectPoolGroupDic[type];
            group.ReturnObj(path, obj);
        }
        else
        {
            Logx.LogWarning("the type is not found : " + type.ToString());
        }
    }
    public void GetObject <T>(string path, Action <UnityEngine.Object> callback)
    {
        var             type  = typeof(T);
        ObjectPoolGroup group = null;

        if (objectPoolGroupDic.ContainsKey(type))
        {
            group = objectPoolGroupDic[type];
        }
        else
        {
            group = new ObjectPoolGroup();
            objectPoolGroupDic.Add(type, group);
        }

        group.GetObject(path, callback);
    }
Esempio n. 4
0
    private void Awake()
    {
        Instance   = this;
        _poolGroup = new List <ObjectPoolGroup>();
        foreach (var e in _poolEntries)
        {
            var groupContainer = new GameObject(e.PrefabObject.name);
            groupContainer.transform.parent = transform;
            var group = new ObjectPoolGroup
            {
                PrefabObject    = e.PrefabObject,
                PooledInstances = new Dictionary <int, ObjectPoolInstance>(),
                Parent          = groupContainer.transform
            };

            for (int i = 0; i < e.PrefabDefaultInstances; i++)
            {
                CreateInstanceInGroup(group);
            }

            _poolGroup.Add(group);
        }
    }