当前位置: 首页 > news >正文

兖州网站建设多少钱一键优化为什么不能100

兖州网站建设多少钱,一键优化为什么不能100,广西建设局网站首页,北京互联网公司网站建设介绍 是什么#xff1f; 在开始时初始化若干对象#xff0c;将它们存到对象池中。需要使用的时候从对象池中取出#xff0c;使用完后重新放回对象池中。 优点 可以避免频繁创建和销毁对象带来性能消耗。 适用场景 如果需要对某种对象进行频繁创建和销毁时#xff0c;例…介绍 是什么 在开始时初始化若干对象将它们存到对象池中。需要使用的时候从对象池中取出使用完后重新放回对象池中。 优点 可以避免频繁创建和销毁对象带来性能消耗。 适用场景 如果需要对某种对象进行频繁创建和销毁时例如应用在发射子弹、多个敌人创建等 代码逻辑 Unity中实现思路 1、设定初始化数量创建List列表作为对象池容器。 2、初始化时通过Instantiate方法根据指定数量实例化一批对象并存入List容器中。 3、使用时从容器中取出一个可用对象并SetActive(true)取出后从容器中移除。 4、使用完毕后将对象SetActive(false)并重新放回List容器中。 主要方法 //初始化对象池 private void InitPool() {}//创建单个对象池中的对象 private GameObject CreatePoolCell() {}//从对象池中取出可用对象 private GameObject GetObjectFromPool() {}//将对象放回对象池中 private void BackObjectToPool(GameObject obj) {}//删除对象池 private void DestroyObjectPool() {} 示例代码 using System.Collections; using System.Collections.Generic; using UnityEngine;public class Test : MonoBehaviour {public GameObject template;public Transform parentRoot;public Transform newRoot;private ListGameObject objectPool;private int initCount;//对象池初始化的数量void Start(){InitPool();}void Update(){if (Input.GetKeyDown(KeyCode.Space)){var obj GetObjectFromPool();ResetLocalPos(obj, newRoot);StartCoroutine(Check1(obj));}}IEnumerator Check1(GameObject obj){yield return new WaitForSeconds(5f);BackObjectToPool(obj);}#region 对象池逻辑//初始化对象池private void InitPool(){initCount 10;objectPool new ListGameObject();for (var i 0; i initCount; i){var obj CreatePoolCell();objectPool.Add(obj);}}//创建单个对象池中的对象private GameObject CreatePoolCell(){var obj Instantiate(template, parentRoot);obj.SetActive(false);obj.transform.localPosition Vector3.zero;return obj;}//从对象池中取出可用对象private GameObject GetObjectFromPool(){for (var i 0; i objectPool.Count; i){var obj objectPool[i];if (!obj.activeInHierarchy){obj.SetActive(true);objectPool.Remove(obj);return obj;}}var newObj CreatePoolCell();newObj.SetActive(true);return newObj;}//将对象放回对象池中private void BackObjectToPool(GameObject obj){if (objectPool.Contains(obj)){return;}obj.SetActive(false);ResetLocalPos(obj, parentRoot);objectPool.Add(obj);}//删除对象池private void DestroyObjectPool(){foreach (var iconObj in objectPool){DestroyImmediate(iconObj);}objectPool.Clear();}private void ResetLocalPos(GameObject obj,Transform parent){var trans obj.transform;trans.SetParent(parent);trans.localPosition Vector3.zero;}#endregion }Unity自带对象池 构造函数 //将会在创建新对象的时侯调用 FuncT createFunc, //会在从池子获取对象的时侯调用 ActionT actionOnGet null, //将对象放回池子里的时侯调用 ActionT actionOnRelease null, //会在彻底销毁对象的时侯调用 ActionT actionOnDestroy null, //安全检查防止将已经回收过的对象进行再一次的重复回收默认参数的true即可 bool collectionCheck true, //池子初始的默认大小会在初始化时创建一个该容量大小的 stack //需要根据自己项目的实际需求去权衡一下初始容量的大小。 int defaultCapacity 10,//主要是防止对象池内存过量增长限定的对象池内最大可容纳的对象数量 //如果池子超出了这个大小接下来的回收对象将不会回到对象池 //而是直接调用它的 actionOnDestroy 回调进行销毁操作。 int maxSize 10000) 主要属性和方法 接口 类型 描述 CountActive 属性 正在使用即被激活的的对象数量 CountInactive 属性 可以重用的对象数量 CountAll 属性 正在使用的对象和可以重用的对象的总数量 Get 方法 从对象池中获取对象 Release 方法 将对象放回池子中 Clear 方法 清理对象池 示例代码 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Pool;public class Test : MonoBehaviour {public GameObject template;public Transform parentRoot;public Transform newRoot;private ListGameObject objectPool;private int initCount;//对象池初始化的数量private ObjectPoolGameObject testPool;public bool useObjectPool;void Start(){testPool new ObjectPoolGameObject(() {//createFunc//将会在创建新对象的时侯调用var obj Instantiate(template, parentRoot);obj.SetActive(false);obj.transform.localPosition Vector3.zero;return obj;},(go) {// actionOnGet // 会在通过池子获取对象的时侯调用go.SetActive(true);var trans go.transform;trans.SetParent(newRoot);trans.localPosition Random.insideUnitSphere;},(go) {// actionOnRelease// 在对象放回池子里的时侯调用这里我们取消激活需要放回池中的对象go.SetActive(false);var trans go.transform;trans.SetParent(parentRoot);trans.localPosition Vector3.zero;},(go) {/* actionOnDestroy 会在彻底销毁对象的时侯调用这里直接去destroy它就可以了对象池会在你手动释放对象或者内部空间无法存储你返回的对象的时侯调用这个函数来销毁它们*/Destroy(go); });}void Update(){if (Input.GetKeyDown(KeyCode.Space)){var obj testPool.Get();StartCoroutine(Check1(obj));}}IEnumerator Check1(GameObject obj){yield return new WaitForSeconds(5f);testPool.Release(obj);} }其他类型的对象池
http://www.yingshimen.cn/news/32984/

相关文章:

  • 温州网站建设温州wordpress特定账户注册
  • 网站建设单位有哪些wordpress icomoon
  • 上海 网站制作农产品网站管理员怎么做
  • yollow网站推广用html是做班级简介网站
  • 高职高专图书馆网站建设公司做竞拍网站的收入怎么报税
  • 做房地产资质是什么网站查专业广州做网站公司
  • 网站版权信息修改如何建立营销型网站
  • 做么网站有黄免费注册网站空间
  • 网站备案 加急做融资的网站有哪些
  • 建设银行网站维护网站世界排名怎么做
  • 潍坊网站建设技术外包wordpress主题换图片不显示
  • 网站怎么让谷歌收录网站制作的行业
  • 做网站渠道国内永久免费crm系统网站推荐有哪些
  • 企划做网站装修网单
  • 关于网站建设的电话销售话术做映射后 内网无法通过域名访问网站
  • 网站开发维护需要哪些岗位wordpress的标签设置
  • 西安网站设计锦近一周的热点新闻
  • 南昌seo站内优化青岛企业做网站
  • 电子商务网站建设感悟wordpress评论优化
  • 网站数据库是什么意思私域流量运营平台有哪些
  • 5年网站seo优化公司秦皇岛网站制作的流程
  • 移动端网站建设的方案做网站的资料
  • 昆明app网站开发公司随州网站建设哪家实惠
  • 旅游网站建设规划网站开发还有哪些
  • 做教育行业网站html5开发工程师是做什么的
  • 阿里云 两个网站贵州安顺建设局网站
  • 国内免费工厂网站建设最常见的网络营销方式
  • 网站的支付接口对接怎么做怎么进入wordpress修改界面
  • 有哪些文本封面做的好的网站成都城乡建设网站
  • 做旅行社业务的网站都有哪些有谁想做网站 优帮云