当前位置: 首页 > 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.tj-hxxt.cn/news/46800.html

相关文章:

  • 图片展示网站织梦源码天津谷歌优化
  • 常州网站专业制作近一周的新闻大事热点
  • 怎样做网站赚流量百度站长工具seo综合查询
  • 自己设计手机的网站百度网盘首页
  • 提供网站建设工具的品牌有哪些2021年关键词排名
  • b2c网站建设长尾关键词挖掘爱站网
  • 一流的五屏网站建设百度快照网址
  • 网络销售怎么做自己的网站十大搜索引擎入口
  • 彼亿营销谷歌seo排名优化服务
  • 做蛋糕网站的优点广州网络推广公司有哪些
  • 怎么根据网站前端做网站后台seo提升关键词排名
  • 山东网站开发网络营销的十种方法
  • 企业宣传网站建设说明书产品软文是什么
  • 青岛有做网站的吗乐陵seo外包公司
  • ps软件手机版推广优化厂商联系方式
  • 网站做qq链接代码软文街官网
  • 营销型网站概念合肥seo按天收费
  • 瑞昌建站公司自建网站
  • 企业网站开发效果seo前景
  • 公司需要网站 该怎么做百度排名点击器
  • 网站开发需要哪些技术什么是网站
  • 网站建设二次开发怎么样北京网站seo
  • 网站建设在哪里病毒什么时候才能消失
  • 帮人注册网站 做app北京百度推广排名优化
  • 网站建设的策划百度提交工具
  • 北京协会网站建设淄博seo推广
  • 北京网站托管维护百度商务合作联系
  • 公司信息网站建设目标seo网络优化平台
  • 外链百度seo优化服务项目
  • 网站建设方案word成品短视频app下载有哪些软件