Unity对象池代码

2019-07-23  本文已影响0人  86a262e62b0b

参考:官方

简介:
对象池就存放需要被反复调用资源的一个空间,当一个对象会大量生成的时候,如果每次都销毁创建会很费时间,通过对象池把暂时不用的对象放到一个池中(也就是一个集合),当下次要重新生成这个对象的时候先去池中查找一下是否有可用的对象,如果有的话就直接拿出来使用,不需要再创建,如果池中没有可用的对象,才需要重新创建,利用空间换时间来达到游戏的高速运行效果。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MyObjectPooling : MonoBehaviour
{
    public static MyObjectPooling objectPooling;
    public GameObject targetObject;
    public int poolSize;
    public bool isGrow = true;

    public List<GameObject> pooledObjects;

    private void Awake()
    {
        objectPooling = this;
    }

    private void Start()
    {
        //初始化
        pooledObjects = new List<GameObject>();

        for (int i = 0; i < poolSize; i++)
        {
            GameObject obj = (GameObject)Instantiate(targetObject);
            obj.SetActive(false);
            pooledObjects.Add(obj);
        }
    }

    public GameObject GetPoolObject()
    {
        for (int i = 0; i < pooledObjects.Count; i++)
        {
            if (!pooledObjects[i].activeInHierarchy)
            {
                return pooledObjects[i];
            }
        }

        //上面如果去到了,就不会调用下面的代码
        if (isGrow)
        {
            GameObject obj = (GameObject)Instantiate(targetObject);
            pooledObjects.Add(obj);
            return obj;
        }

        return null;
    }
}
上一篇 下一篇

猜你喜欢

热点阅读