前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >认真CS☀️对象池

认真CS☀️对象池

作者头像
星河造梦坊官方
发布2024-08-15 17:05:03
1000
发布2024-08-15 17:05:03
举报
文章被收录于专栏:星河造梦坊专栏

对象池使用场景:

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

我们用对象池,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;
    }
}

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-09-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 代码:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档