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

多语言外贸网站源码企业app开发的公司

多语言外贸网站源码,企业app开发的公司,《建设工程质量管理条例》,logo网站设计图片问题描述:Unity在创建和销毁对象的时候是很消耗性能的,所以我们在销毁一个对象的时候,可以不用Destroy,而是将这个物体隐藏后放到回收池里面,当再次需要的时候如果回收池里面有之前回收的对象,就直接拿来用…

问题描述:Unity在创建和销毁对象的时候是很消耗性能的,所以我们在销毁一个对象的时候,可以不用Destroy,而是将这个物体隐藏后放到回收池里面,当再次需要的时候如果回收池里面有之前回收的对象,就直接拿来用,这样就可以大量的创建和销毁物体。

首先创建一个子弹预制体,并添加刚体组件,然后创建一个Skill空对象和一个Skill脚本

using System.Collections;
using UnityEngine;public class Skill : MonoBehaviour
{public int _SkillLv;//技能等级public GameObject bluut;//子弹预制体[Header("可调节参数")]//速度合成public float _Speedy;public float _Speedx;public float  _cd;void Start(){StartCoroutine(FireCoroutine());}//定义一个携程,用于在一定时间后发射子弹//间隔为_cd秒IEnumerator FireCoroutine(){while (true){yield return new WaitForSeconds(_cd);fashe(_SkillLv);}}//发射子弹的方法void fashe(int lv){for (int i = 0; i < lv; i++){GameObject bullet = Instantiate(bluut, transform.position, Quaternion.identity);int randomY = Random.Range(200, (int)_Speedy);int randomX = Random.Range(-(int)_Speedx, (int)_Speedx);bullet.GetComponent<Rigidbody2D>().AddForce(new Vector2(randomX, randomY));Destroy(bullet, 5f);}}
}

 将Skill脚本加到Skill空对象上然后将子弹预制体拖入,然后运行游戏。

调整参数并观察游戏的帧率(可以看到在等级为10,cd为1的时候帧率还是挺高的)

上上强度(当等级为500,cd为1的时候可以看到此时的帧率下降明显)

 

现在看看加入对象池的效果 

 首先创建一个BulletPoolManager空对象和对应的脚本,并将脚本拖到空对象上

using System.Collections.Generic;
using UnityEngine;public class BulletPoolManager : MonoBehaviour
{// 子弹的预制体public GameObject bulletPrefab;//初始化对象池private Queue<GameObject> pool = new Queue<GameObject>();//单例模式public static BulletPoolManager Instance;void Awake(){if (Instance == null){Instance = this;DontDestroyOnLoad(gameObject);}else{Destroy(gameObject);}}//创建子弹的方法public GameObject GetBullet(){if (pool.Count > 0){GameObject obj = pool.Dequeue();obj.SetActive(true);return obj;}else{// 如果对象池里面没有可用的子弹,则实例化一个新的子弹对象//注意这里是为了演示所有子弹是直接从预制体中实例化的,实际使用时,需要动态创建子弹对象GameObject newbullet = Instantiate(bulletPrefab);  return newbullet;}}// 回收子弹的方法public void ReturnBullet(GameObject bullet){bullet.SetActive(false);bullet.transform.SetParent(transform);pool.Enqueue(bullet);}
}

将子弹的预制体拖到回收池对应位置(这里为了方便直接用拖的,实际使用的时候根据需要修改这里) 

 修改技能代码

主要修改的地方

using System.Collections;
using UnityEngine;public class Skill : MonoBehaviour
{public int _SkillLv;//技能等级public GameObject bluut;//子弹预制体[Header("可调节参数")]//速度合成public float _Speedy;public float _Speedx;public float  _cd;void Start(){StartCoroutine(FireCoroutine());}//定义一个携程,用于在一定时间后发射子弹//间隔为_cd秒IEnumerator FireCoroutine(){while (true){yield return new WaitForSeconds(_cd);fashe(_SkillLv);}}//发射子弹的方法void fashe(int lv){for (int i = 0; i < lv; i++){GameObject bullet = BulletPoolManager.Instance.GetBullet();bullet.transform.position = transform.position;bullet.transform.parent = gameObject.transform;int randomY = Random.Range(200, (int)_Speedy);int randomX = Random.Range(-(int)_Speedx, (int)_Speedx);bullet.GetComponent<Rigidbody2D>().AddForce(new Vector2(randomX, randomY));StartCoroutine(ReturnBullet(bullet));}}IEnumerator ReturnBullet(GameObject bullet){yield return new WaitForSeconds( 5f);BulletPoolManager.Instance.ReturnBullet(bullet);}
}

运行游戏并修改参数我们会发现同样等级10,cd=1的时候的帧率要高于不用回收池的时候。

试试等级500,cd为1

 可以看到使用对象池还是有一点提升的。

你可以在这里看到回收的对象

这是用的对象池是用队列来存储回收的对象的,在实际开发中并不一定要使用队列,只要能存储多个对象的数据结构不管是泛型还是数组都可以当做对象池。

http://www.yayakq.cn/news/878630/

相关文章:

  • 东莞网站建设ajwordpress常用页面
  • 网站建设建站东莞免费建网站企业
  • 家政服务网站做推广有效果吗建设网站运营
  • 如何整理做网站的素材关于做膳食的一些网站
  • 南京最大网站建设公司宁波免费seo在线优化
  • 网站哪些付款二维码是怎么做的网页设计师行业分析
  • 盐城快速建设网站找哪家黑白风格网站
  • 怎么制作一个网站教程wordpress demo 导入
  • 网站设计培训班创业网站开发课程设计培训
  • 学校网站开发工作室百度怎么做自己网站
  • wordpress 添加控件嘉兴seo网络推广
  • 网站导航网站开发yw55523can优物入口4虎
  • 网站编辑建设建筑课堂首页
  • 遂宁住房和城乡建设厅网站附近那里有做网站的
  • 佛山哪家公司建设网站中国新闻社招聘2023年
  • 开发网站的技术风险东莞网站优化建设团队
  • 国产网站开发工具公司电脑下什么wordpress
  • 张店网站建设哪家好自己做的网站提示不安全
  • 移动网站建设解决方案珠海多语种网站制作
  • 建设返利优惠券网站旅游网站建设的建议
  • 专业自助建站wordpress中文插件
  • c 网站开发环境水务公司网站建设方案
  • 株洲建设局网站抖店推广
  • 怎么做游戏推广网站百度收录链接提交入口
  • 他们怎么做的刷赞网站深圳市中心在哪
  • 专业积分商城网站制作怎么做关不掉的网站
  • 长安建网站公司请别人做网站签订合同
  • 做游戏脚本的网站信息发布型网站是企业网站的什么
  • 网站之前没备案长春生物新冠疫苗
  • 做机械设计图纸找什么网站?九江市建设局网站