认真CS☀️对象池

2024-08-15 17:05:03 浏览数 (1)

对象池使用场景:

游戏发射子弹,子弹不能是一直实例化,太消耗资源。

我们用对象池,Start时先孵化一些备用子弹, 发射时循环使用这些子弹。

下面 GetPipe() 代码就是获得第一颗、第二颗、第三颗、第四颗。。。第一颗这样的顺序。

代码:
代码语言:javascript复制
using System.Collections.Generic;
using UnityEngine;

public class NewBehaviourScript : MonoBehaviour
{
    public static NewBehaviourScript instance;
    private void Awake()
    {
        instance = this;
    }

    /*储存对象数组*/
    public List<GameObject> Pipes;

    /*生成对象个数*/
    public int PipeAmount;

    /*要生成对象的预制件*/
    public GameObject Pipe;

    /*贪心算法参数*/
    int SuoYin = 0;

    void Start()
    {
        /*将数组new出来*/
        Pipes = new List<GameObject>();
        
        /*孵化过程*/
        for (int i = 0; i < PipeAmount; i  )
        {
            GameObject PIPE = Instantiate(Pipe);
            PIPE.SetActive(false);
            /*生成对象放在固定位置子类*/
            PIPE.transform.SetParent(this.transform);
            /*生成对象存入数组*/
            Pipes.Add(PIPE);
        }
    }

    /*获得最新的、未被使用的对象*/
    public GameObject GetPipe()
    {
        for (int i = 0; i < PipeAmount; i  )
        {
            int item = (SuoYin   i) % PipeAmount;
            if (!Pipes[item].activeInHierarchy)
            {
                SuoYin = (item   1) % PipeAmount;
                return Pipes[item];
            }
        }
        return null;
    }
}

大家还有什么问题,欢迎在下方留言!

0 人点赞