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

荣泰建设集团网站网站推广和网络推广

荣泰建设集团网站,网站推广和网络推广,成都住建局官网租房,it培训机构哪个好一点自定义泛型对象池 文章目录 自定义泛型对象池封装泛型类例子 使用Unity自带对象池 封装泛型类 public abstract class MyPool<T> : MonoBehaviour where T :Component {[SerializeField] protected T prefab; // 生成的预制体[SerializeField] protected int defaultNum…

自定义泛型对象池

文章目录

  • 自定义泛型对象池
    • 封装泛型类
    • 例子
  • 使用Unity自带对象池

封装泛型类

public abstract class MyPool<T> : MonoBehaviour where T :Component
{[SerializeField] protected T prefab; // 生成的预制体[SerializeField] protected int defaultNum; // 池子的大小protected Queue<T> pool = new Queue<T>(); // 队列存储池子protected bool IsPoolEmpty() => pool.Count == 0;protected bool IsPoolFull() => pool.Count > prefab;// 对象池四件套protected virtual T OnCreateItem() => Instantiate(prefab, transform);protected virtual void OnGetItem(T obj) => obj.gameObject.SetActive(true);protected virtual void OnReleaseItem(T obj) => obj.gameObject.SetActive(false);protected virtual void OnDestroy(T obj) => Destroy(obj.gameObject);// 用来获得对象后初始化一些信息protected abstract void InitializedObj(T obj); protected T Get(){T obj;if (IsPoolEmpty()) obj = OnCreateItem();else{obj = pool.Dequeue();OnGetItem(obj);}InitializedObj(obj);return obj;}protected void Release(T obj){if (IsPoolFull()) OnDestroy(obj);else{pool.Enqueue(obj);OnReleaseItem(obj);}}}

例子

BoxPool:

public class BoxPool : MyPool<Box> 
{public float IntervalTime = 0.1f;void Start(){StartCoroutine(ContinueCreateBox());}// 不断生成对象private IEnumerator ContinueCreateBox(){while (true){Box box = Get(); // 获得出来使用yield return new WaitForSeconds(IntervalTime);}}// 重写创建对象方法,添加委托protected override Box OnCreateItem(){Box box = base.OnCreateItem();box.SetBackDestroy(() => {Release(box);});return box;}// 完成抽象方法,初始化信息protected override void InitializedObj(Box obj){obj.transform.position = transform.position + Random.insideUnitSphere * 2f; // 半径2内随机 obj.transform.rotation = Quaternion.identity;obj.GetComponent<Rigidbody>().velocity = Vector3.zero; // 重置刚体速度,否则会越掉越快}}

Box:

public class Box : MonoBehaviour
{public UnityAction backDestroy;private float intervalTime = 1.5f;private float nowTime;private void Update() {nowTime += Time.deltaTime;if (nowTime > intervalTime){nowTime = 0;backDestroy?.Invoke();}}public void SetBackDestroy(UnityAction back){backDestroy = back;}
}

不断生成Box

使用Unity自带对象池

http://www.dtcms.com/wzjs/443718.html

相关文章:

  • 福州建网站 做网页淘宝权重查询入口
  • 交通门户网站建设seo网站关键词排名提升
  • 产品包装设计网站百度站长链接提交
  • 福州专业网站建设北京正规seo搜索引擎优化价格
  • 电话销售企业网站怎么做提供seo服务
  • a做爰视频免费网站百度大全
  • 一级做网站视频教学企点
  • 做网站建设的公司win7系统优化软件
  • 如何制作营销网站模板下载秦皇岛seo优化
  • 公众号运营策划宁波seo软件
  • 海宁市建设局官方网站6有别人的交易链接怎么交易
  • 网站开发文档撰写作业怎么做好网站营销推广
  • 网站建设怎么用ftp上传到web磁力搜索引擎不死鸟
  • 谈谈网站开发流程百度热搜榜今日头条排名
  • 高端网站设计公司名单职业技能培训有哪些
  • 个人网站做什么资源赚钱网络营销最基本的应用方式是什么
  • 谷歌网络营销的概念seo关键词大搜
  • 真人做的免费视频网站火星培训机构收费明细
  • 下wordpressseo推广哪家好
  • 有做赛车网站的吗汕头seo推广
  • 网站维护教程自媒体平台排名前十
  • 网站公司seo国产长尾关键词拘挖掘
  • 怎么样免费做网站seo网站优化公司
  • 做网站后期维护工资贴吧镇江网站制作公司
  • 建立主题网站的知识点软文广告经典案例短的
  • 深圳网站开发云搜索系统
  • 网站建设 珠海 java百度一下首页网页手机版
  • 网站内容专题怎么做链接平台
  • 北京工程网站建设宝鸡seo外包公司
  • 厦门住建局长沙seo优化报价