Unity中,Destory()和DestroyImmediate()的一些坑

您所在的位置:网站首页 times和multiple的区别 Unity中,Destory()和DestroyImmediate()的一些坑

Unity中,Destory()和DestroyImmediate()的一些坑

2024-07-12 04:47:02| 来源: 网络整理| 查看: 265

今天写代码的时候,遇到了个需求,需要删除一个对象,然后同一帧中创建一个新的同名对象,直接使用Destory方法,删除的话,由于我做了对象缓存,并且删除再OnDestory中进行的缓存清理,所以会导致创建失败,需要创建的对象已存在(设定了同名对象即为同一个,不可创建),这时候,就要讨论下Destory()和DestroyImmediate()的一些区别

----------------------------------------------------------废话说完,说正文-----------------------------------------------

1   Destroy是异步删除,调用之后游戏物体并不会立即被删除,可以理解为,只是将他标记为需要删除,并不会马上删除和清理缓存,会在当前帧结束时,将所有标记为需要删除的对象,进行删除和缓存清理,它是异步执行的,不会影响主线程的执行,并且更加节省性能

2  DestroyImmediate,是立即删除游戏物体,游戏物体立即被删除,并清除缓存,代码顺序执行,影响主线程的执行

这些都是比较容易查到的信息,不是我要说的重点,我这边需要说的坑是其他的一些细节:

1.使用Destory()和DestroyImmediate()时,OnDestory的调用时机,有什么区别

 从官方给的Unity生命周期看,OnDestory是在每帧的最后调用的,但是实际上,这边显示的OnDestory是使用Destory()方法删除对象,的调用时机,如果使用DestroyImmediate()方法,经过我的测试,是实时调用的,即调用了DestroyImmediate()方法后,会立即调用被删除对象的OnDestory()方法

2.为什么推荐使用Destory而不是DestroyImmediate

使用DestroyImmediate实时删除对象和清除缓存,会导致主线程卡顿,也就是游戏卡顿,并且每次都是单次调用,会导致消耗更多的资源,因为准备清除缓存和缓存清除之后的过程,都是需要消耗资源的,可以理解为DrawCall,优化性能的其中一个方式就是,将小量多次的DrawCall,通过合并贴图的方式,变成一次较大量的DrawCall,Destory的销毁方式也是类似的操作,将当前帧需要删除的对象,都标记好,在当前帧结束时统一删除,并且是异步的,不影响主线程,只是占用少量性能,比较DestroyImmediate,会节省大量性能



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭