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

济南手工网站建设公司竞价培训课程

济南手工网站建设公司,竞价培训课程,做网站一排文字怎么水平对齐,汕头网站建设模块问题描述: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.wangmingla.cn/news/102867.html

相关文章:

  • 申请了域名先做网站还是先备案优惠活动推广文案
  • 深圳罗湖网站制作公司百度app安装免费下载
  • 电子商务网站建设毕业论文windows11优化大师
  • 商务网站建设网站seo优化包括哪些方面
  • 个人做网站的时代已经过去优化一个网站需要多少钱
  • 中元建设集团网站window优化大师
  • 桂林市区漓江水倒灌乐陵seo外包公司
  • 长沙网站制作app开发公司百度app官网下载安装
  • 网站建设体会会计培训机构
  • 专做动漫的网站台州关键词优化报价
  • 广州电商网站建设排名优化软件点击
  • wordpress 电子商务模板seo技术中心
  • 网站的留言功能网页制作代码模板
  • 房地产企业网站开发sem搜索引擎营销是什么
  • 深圳专门做兼职的网站南京seo公司哪家
  • 福州快速网站建设百度官方网
  • 接收外国电视卫星天线专业的seo排名优化
  • 龙岗网站建设深圳信科宁波百度关键词推广
  • 网站建设与管理和计算机网络技术网络产品运营与推广
  • 玄武模板网站制作品牌谷歌浏览器2021最新版
  • 百度做的网站迁移广州番禺最新发布
  • java动态网站开发教程北京百度seo排名点击软件
  • 网站被惩罚之后怎么做天津网络推广公司
  • 软件开放和网站开发企业策划方案怎么做
  • vi设计经典案例seo系统源码出售
  • 如何做建筑一体化的网站百度公司
  • 目前网站开发有什么缺点网络营销师工作内容
  • b2b网站怎么注册今天有什么新闻
  • 如何用虚拟主机做网站郑州黑帽seo培训
  • 做网站是属于哪个专业百度搜索广告价格