Unity3D关于Destroy不会立即销毁的问题

Unity 踩过的坑 之 Destroy方法 Destroy 方法在销毁一个对象时,并不是立即销毁,而是在下一次 Update 执行之前(所有对象的 Update 方法是统一执行,不会出现一个对象开始执行 Update 了,而另一个对象还在处理 FixedUpdate 这种情况)·介于上一条的,在调用 Destroy 方法后,可以继续访问此对象挂载的脚本中的方法或者其他组件,但在下一帧时,对象就会被销毁,指向对象的引用也会为空。这个功能是在销毁物体后按照顺序对物体进行命名,但命名的方法总是在Destroy方法执行之前就执行,导致命名混乱。 阅读详情
Destroy(obj);
print(obj);

上面的obj并不会立即销毁,而是需要等待下一个Update更新,所以还是可以被print出来
如果需要立即销毁则应该改为

DestroyImmediate(obj);
print(obj);

很简单的东西,但是却花了一个上午找错,知道与不知道的问题,但是官方文档强烈推荐Destroy,也不知道后者有什么不好的地方。

【源码】Object.Destroy 销毁 物体obj现在被销毁或在指定了t时间过后销毁。如果obj是组件,它将从GameObject销毁组件component。如果obj是GameObject它将销毁GameObject全部它的组件和GameObject全部transform子物体。实际物体的销毁总是延迟到当前更新循环后,但总是渲染之前完成。   //销毁游戏物体 Destroy (gameObject); //从游戏物体删除该脚 阅读详情

相关推荐

Unity3D:问题(已解决):如何解决:内存不断增加的问题

一.目的 1.想解决:Unity不断内存增加 二.参考 1.Unity3D内存释放 (很详细的) https://www.cnblogs.com/dudu580231/p/7160547.html good:值得参考 三.注意 四.操作:1:成功 1.猜测是 Destroy时候不干净 1.代码 Resources.UnloadUnusedAssets(); 1.运行效果:不断点击时候,明显内存没有增加那么夸张了 ...

qq_40544338的博客 1万+

unity 模型销毁_unity3D技术之Object.Destroy 销毁

static function Destroy (obj : Object, t : float = 0.0F) : void Description描述Removes a gameobject, component or asset.删除一个游戏物体,组件或者资源。The object obj will be destroyed now or if a time is specified t s...

weixin_36024829的博客 1809

UNSW-NB15数据集:网络流量分析与恶意攻击检测实战指南

本文提供了UNSW-NB15数据集在网络流量分析与恶意攻击检测领域的实战指南。详细介绍了该数据集的构成、核心特征解析、特征工程处理、机器学习模型训练与评估方法,并探讨了模型部署及持续优化的挑战与思路,帮助读者构建高效的网络攻击检测系统。

weixin_29193359的博客 236

Typescript封装防抖和节流函数

防抖函数 在规定时间内重复执行同一个函数,但是只生效一次函数的行为。比如由于网络延迟,用户在一定时间内会重复点击某一个按钮,然而不断的执行按钮上的事件。若该事件是网络请求,则会给服务器不断造成压力,这是我们不愿看到的。 节流函数 在规定时间内重复执行同一个函数,但是按照一定的时间段生效函数的行为。和防抖函数非常相似。例如在支付回调后我们要确认支付的状态,可以手动检查+自动检查的情况下,我们使用节流...

Minyoung 的博客 9957

Unity中Destory销毁对象不是立即销毁

Unity中 Destory()函数销毁对象时不是立刻销毁的,他是一个延迟执行的函数,是在当前帧之后,渲染帧之前销毁对象,例如下面代码: 子物体只有一个,当用Destory函数销毁子物体后,打印子物体个数还是1。解决方法: 使用DestroyImmediate函数,他是立即销毁对象。 得到的结果是0。...

sjjhgq的博客 2331

UnityDestroy方法不是立即删除

问题描述 在做任务列表时,发现任务的排序位置并不正常,有些地方会很空 原因分析: 开始以为是自己设置位置出现了问题,后来一步步看设置位置的代码,发现是使用了NGUI的UITabel组件的Reposition进行的位置排列。于是便查看源码,进行断点查看,发现Reposition里面有个GetChildList方法会计算当前节点下面处于显示状态的子节点数量,但我在unity中看只有5个子节点,但此处有时候显示了9个子节点,其中有4个是重复的。此时进行的判断就是因为节点数不对导致位置不正常。 但就是为什么会出现

qq_41820068的博客 3686

Unity3D 销毁物体的三种方式

销毁物体 三种方式,各有不同 使用SetActive 中文文档 使用 gameObject.SetActive(bool);设置物体的显示或者隐藏来大小销毁的效果,但它还是存在的,在Hierarchy中还是可以找到他的。 作用就像是点击Inspector中的物体名称前面的对勾。 //使用方式 gameObject.SetActive(true);//显示 gameObject.SetActive(false);//隐藏 他会再次执行Enable方法,不会执行Awake和Start方法。 使用Dest

学不会shader 9965

unity3d Object.Destroy 销毁

static function Destroy (obj : Object, t : float = 0.0F) : void Description描述 删除一个游戏物体,组件或者资源。 物体obj现在被销毁或在指定了t时间过后销毁。如果obj是组件,它将从GameObject销毁组件component。如果obj是GameObject它将销毁GameObject全部它的组件和Game

互动教程网[www.hdjc8.com] 3万+

unity3d销毁游戏对象_如何在Unity 3D中销毁游戏对象

unity3d销毁游戏对象 如何在Unity 3D中销毁游戏对象 (How to Destroy Game Objects in Unity 3D) As important instantiating and modifying gameObjects is in a game, it's equally important to destroy them when they are not ...

cunfen6312的博客 4492

Unity3D日常开发】UnityDestroy()函数 和 DestroyImmediate()函数的区别

Destroy()函数 和 DestroyImmediate()函数的区别 目标: 这篇文章的目标是了解Destroy()函数和DestroyImmediate()函数之间的区别。 这两个函数的最终作用是相同的,都是去销毁游戏物体,但唯有一点点小区别,我们去理解这个小区别是非常重要的,错误的使用这些函数可能会导致你的应用层序崩溃。 下面,用一点理论,和测试代码去理解它。 Destroy(): ...

CSDN博客专家,Unity3D高级软件工程师,《Unity 3D从入门到实战》作者。 4627

Unity3D开发之DestroyDestroyImmediate

正如单词所表述的意思,一个是销毁物体,一个是立即销毁。单纯的Destroy调用后不会立即销毁物体,如API所述会在update执行后在某个时间执行,但一定实在render调用之前。而DestroyImmediate调用会立即执行销毁物体。只有销毁掉才会执行下一句代码。 代码执行结果验证: GameObject go=new GameObject(); D d=new D() { go=go }; Destroy(go); Debu...

Jay W的博客 5072

unity 模型销毁_Unity3D常用 API 之实例化与销毁

1.实例化游戏物体1.1.游戏中的案例介绍在很多 MMORPG 类的游戏中都有类似于“金钱副本”的副本关卡。在这类副本中通常都是限定一个时间,在这个时间内玩家可以尽情的破坏,然后收集金钱。分析游戏截图讲解场景元素:[见图]①场景中所有的坛子,模型都是一样的,坛子是预制体。②坛子是从“天上”掉下来的,所以坛子模型身上有刚体组件。③如果玩家在一段时间内没有打碎坛子,这些坛子会消失。1.2.案例场景制作...

weixin_42309083的博客 1276

Unity3D基础知识(二) 解决Destroy()删除节点, 后续代码访问此物件出错的问题

问题: 当我们使用Destroy删除物件的时候, 如果后续有代码继续访问此物件, 那么会出现异常. 还有我们的对象池, 当我们把物件A放回到池里, 但是此时F函数又来访问这个物件. 解决方案: 对物件进行封装, 外部访问时不直接操作物件, 而通过接口调用, 删除或放回池里时, 断开该引用即可 using UnityEngine; using System.Collections.Gene

顺飞的博客 2949

Unity3D中Enabled、Destroy与Active的区别

Unity3D游戏对象消失三种方法的区别: 1、gameObject.active:是否在场景中停用该物体,在你gameObject.active =false中,则你在场景中用find找不到该物体。如果该物体有子物体,你要用SetActiveRecursively(false) 来控制是否在场景中停用该物体。 2、GameObject.Destroy():表示移除物体或物体上的组件,

脚踏实地,给自己一个更好的生活 2826

Unity3D销毁对象的方式

转载自:http://m.blog.csdn.net/blog/u010145745/39205461 unity中提供了销毁对象的三种方法: Destroy方法DestroyImmediate方法DontDestroyOnLoad方法 Destroy方法: static void Destroy(Object obj, float t = 0.0F);

yuxikuo_1的专栏 4万+

Unity3D基础27:C#随机函数与物体销毁

  前文:https://blog.csdn.net/Jaihk662/article/details/86766196(物体实例化) 在很多游戏中,都有那种类似“奖励分”的游戏道具,它们会随机刷出,玩家捡到之后就会获得相应的分数或者物品,但是如果在一段时间内没有被任何玩家“拾取”,那么这个奖励道具就会消失 一、随机函数 接前文:很多情况下,奖励道具都是随机位置生成的,这个时候就需要添加随...

加载中... 2206

Unity3D游戏对象消失enabled、Destroy与active的区别

Unity3D游戏对象消失三种方法的区别: gameObject.active:是否在场景中停用该物体,在你gameObject.active =false中,则你在场景中用find找不到该物体。如果该物体有子物体,你要用SetActiveRecursively(false) 来控制是否在场景中停用该物体。 GameObject.Destroy():表示移除物体或物体上的组件,代表销毁该物体,

cbbbc 5305

【CSP-S 提高组】考试大纲集合

【CSP-S提高组】考试大纲集合

weixin_42596089的博客 7055

S2026053基于深度学习的海洋生物检测系统yolov8.zip

本文基于YOLOv10/v8/v5深度学习框架,开发了一套水下海生物检测识别系统。该系统可识别4类海洋生物(海胆、海参、扇贝、海星),支持图片、视频及实时摄像头检测功能。研究通过7464张标注图片训练模型,对比分析了YOLOv5n、YOLOv8n和YOLOv10n三种模型的性能表现(Precision、Recall、mAP等指标)。最终实现的PyQt5可视化界面系统具有目标计数、置信度显示、结果保存等功能,可应用于海洋资源管理、水产养殖等领域。文章详细介绍了数据集准备、模型训练评估流程,并提供了完整的代码实现方案。该系统为海洋生态保护和资源开发提供了高效的智能检测工具。

子木成林
博客等级 码龄15年 0粉丝 1原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值