Unity | 资源释放底层原理

目录

一、Resource.UnloadAsset

二、YooAsset资源释放

三、Destory

四、OnDestroy


一、Resource.UnloadAsset

        Resource.UnloadAsset,可以用来卸载AB加载的asset,后续从AB加载新的asset也没问题,卸载依赖AB的asset也可以。并且发现一点,如果场景上有asset的引用,调用该接口并不会卸载asset,需要asset引用的实例对象都被销毁后再调用UnloadAsset接口才会卸载。(只会卸载特定的资源,而不会影响其他仍在使用的资源。)

        在Unity中,AssetBundle.Unload 方法用于卸载已经加载的AssetBundle资源。这个方法接受一个布尔参数,该参数决定是否卸载AssetBundle中包含的所有对象。

  • 当调用 AssetBundle.Unload(true) 时,这意味着想要卸载AssetBundle以及它所包含的所有资源。这包括任何已经从AssetBundle中加载的资源,如纹理、模型、音频等。使用这个方法时要非常小心,因为如果有其他地方还在引用这些资源,那么这些引用将会变成空引用,可能导致运行时错误或者异常行为。
  • 在调用 AssetBundle.Unload(false) 时,AssetBundle的内存将会被释放,但是实际的资源,比如从AssetBundle中加载的游戏对象和纹理等,不会被卸载。

二、YooAsset资源释放

void LoadAsset()
{    var res = package.LoadAssetAsync<GameObject>("RaceResultAward");res.Completed += (handle) =>{resultAward = Instantiate((GameObject)handle.AssetObject, RaceGameManager._instance.playerParent);handle.Release();}
}
void Clear()
{package.UnloadUnusedAssets();package.ClearUnusedCacheFilesAsync();
}
  • release:减少引用计数
  • package.UnloadUnusedAssets:资源回收(卸载引用计数为零的资源)。该方法底层就是调了AssetBundle.Unload(true) 。
  • ClearUnusedCacheFilesAsync:清理包裹未使用的缓存文件

        所以,我们要自己维护handle的生命周期,不用了再去释放。否则release后引用计数为0了,此时立即调用package.UnloadUnusedAssets()会有问题。

三、Destory

        Destory真正销毁是在一帧后,需要等一帧再执行Resources.UnloadUnusedAssets,通常是用协程实现, yield return new WaitForEndOfFrame();(不等这一帧,GameObject还在,是无论如何都不会让你销毁的。)官方参考是这样说的:

        The object obj will be destroyed now or if a time is specified t seconds from now. If obj is a Component it will remove the component from the GameObject and destroy it. If obj is a GameObject it will destroy the GameObject, all its components and all transform children of the GameObject. Actual object destruction is always delayed until after the current Update loop, but will always be done before rendering。

四、OnDestroy

        物体隐藏时,OnDestroy不会被调用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/28895.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

雪花算法和UUID

目录 雪花算法概念优点和不足优点:缺点:解决方案代码示例 UUID优点与不足优点不足 两种算法的比较应用场景区别 雪花算法 概念 雪花算法是一个分布式id生成算法&#xff0c;它生成的id一般情况下具有唯一性。由64位01数字组成&#xff0c;第一位是符号位&#xff0c;始终为0。…

专业纸箱厂:品质之选

在繁忙的工业园区&#xff0c;我们的纸箱厂以其卓越的品质和高效的生产能力脱颖而出。我们深谙纸箱制造的精髓&#xff0c;不断推陈出新&#xff0c;将传统工艺与现代科技完美结合。我们的纸箱不仅坚固耐用&#xff0c;而且设计独特&#xff0c;能够满足各种包装需求。 田东美达…

宝塔安装了redis但是远程无法连接

服务器&#xff1a;阿里云 宝塔版本&#xff1a;8.0.5 redis版本&#xff1a;7.2.4 操作步骤&#xff1a; 1.在阿里云上开放redis端口&#xff1a;6379 2.在宝塔上开发端口 3.修改redis配置文件&#xff1a; 修改一&#xff1a; 注释&#xff1a;bind 127.0.0.1&#xff0c;…

Chromium 开发指南2024 Mac篇-编译前的准备工作(一)

1.引言 Chromium 是一款开源的网页浏览器项目&#xff0c;作为 Google Chrome 浏览器的基础&#xff0c;其卓越的性能和广泛的应用使其成为众多开发者研究和学习的对象。对于希望深入了解浏览器内核&#xff0c;或是计划在 Chromium 基础上开发自定义浏览器的开发者来说&#…

飙升 postman接口测试工具详解

Postman是一个用于API开发的工具&#xff0c;可以用来测试API接口&#xff0c;发送HTTP请求并查看响应结果。下面是Postman接口测试工具的详解。 创建请求&#xff1a;在Postman中&#xff0c;可以使用多种方式创建请求。可以手动输入请求URL和参数&#xff0c;也可以导入API文…

ANSYS EMC解决方案与经典案例

EMC问题非常复杂&#xff0c;各行各业都会涉及&#xff0c;例如航空、航天、船舶、汽车、火车、高科技、物联网、消费电子。要考虑EMC的对象很多&#xff0c;包含整个系统、设备、PCB、线缆、电源、芯片封装。而且技术领域覆盖广&#xff0c;涉及高频问题、低频问题&#xff1b…

实用软件下载:UltraEditUEStudio最新安装包及详细安装教程

​UEStudio简介&#xff1a;UEStudio建立在上文本编辑器UltraEdit的功能基础上&#xff0c;并为团队和开发人员提供了其他功能&#xff0c;例如深度Git集成&#xff0c;您可以直接在UEStudio中克隆&#xff0c;签出&#xff0c;更新&#xff0c;提交&#xff0c;推入/拉入等操作…

k8s_DaemonSet和Deployment区别

DaemonSet和Deployment是Kubernetes中两种不同的控制器,用于管理Pod的部署和生命周期。它们的主要区别在于它们的用途、行为和管理方式。以下是对DaemonSet和Deployment的详细解释及其主要区别: DaemonSet 主要用途 DaemonSet确保在每个节点上运行一个Pod。它通常用于部署…

揭秘“湖仓一体”——Flink+Paimon+StarRocks,打造实时分析新纪元

1.湖仓一体 数据湖仓是 Flink 流批一体发挥重要作用的场景,使用 Flink Paimon starRocks 来构建湖仓一体数据分析. Apache Paimon 是一个专为实时数据处理而设计的湖表格式&#xff0c;它最大的亮点是使用了 LSM Tree 技术。与 Hudi 相比&#xff0c;Paimon 在更新插入&…

javaWeb项目-ssm+vue大学生心理健康管理系统功能介绍

本项目源码&#xff1a;java-springboot大学生心理健康管理系统的设计与实现源码资源-CSDN文库 项目关键技术 开发工具&#xff1a;IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7 框架&#xff1a;ssm、Springboot 前端&#xff1a;Vue、ElementUI 关键技术&#xff1a;spr…

使用Java实现HTTP请求头信息的日志记录与过滤

在Java Web开发中&#xff0c;日志记录是一个重要的环节&#xff0c;它可以帮助我们跟踪系统的运行状况&#xff0c;发现潜在的问题。对于HTTP请求来说&#xff0c;记录请求头信息尤其有用&#xff0c;因为它可以提供关于客户端环境、请求来源、以及可能的认证信息等。但是&…

(分治算法4) leecode 105 从前序与中序遍历构建二叉树

题目描述 给定两个整数数组preorder和inorder&#xff0c;其中preorder是二叉树的先序遍历&#xff0c;inorder是同一棵树的中序遍历&#xff0c;请构造二叉树并且返回其根节点。 分治算法求解 前序遍历的第一个就是根节点&#xff0c;根据根节点的位置&#xff0c;我们可以…

celery使用 Zookeeper 或 kafka 作为broker,使用 mysql 作为 backend

背景介绍: 先贴上celery官方文档:Celery - Distributed Task Queue — Celery 5.4.0 documentation xxx项目中单点环境运行celery + redis,使用流畅,不做过多介绍。 切换高可用环境时,客户redis使用的是cluster集群,官方文档中并没有对redis cluster的支持,查看githu…

MQTT协议

MQTT协议&#xff08;Message Queuing Telemetry Transport&#xff09;是一种轻量级的、基于发布/订阅模式的消息传输协议。以下是关于MQTT协议的清晰归纳&#xff1a; 1.协议标准&#xff1a;MQTT是ISO标准&#xff08;ISO/IEC PRF 20922&#xff09;下的消息协议。它最初由I…

Kubernetes 1.18 部署 Traefik2.0

Kubernetes 1.18部署 Traefik2.0 参考资料&#xff1a; Traefik 2.0 官方文档&#xff1a;https://doc.traefik.io/traefik/v2.0/Kubernetes 1.18.3 部署 Traefik2.0&#xff1a;https://www.cnblogs.com/heian99/p/14608414.html 1. Traefik 介绍 traefik 是一款反向代理、…

CRMEB多门店的门店后台首页路由

如何在输入 http://localhost:8080/、http://localhost:8080/store/、http://localhost:8080/custom-store/ 这三个中任意一个链接都能正确跳转到 http://localhost:8080/store/home/index 。要实这个要求&#xff0c;有两种方式&#xff1a; 重定向 const router new VueRo…

App端接口用例设计方法和测试方法

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 前言 接口测试作为测试的重要一环&#xff0c;重点关注的是数据层面的输入输出&#xff0c;今天…

【JVM】JVisualVM的介绍、使用和GC过程

VisualVM介绍 VisualVM 是Netbeans的profile子项目&#xff0c;已在JDK6.0 update 7 中自带&#xff0c;能够监控线程&#xff0c;内存情况&#xff0c;查看方法的CPU时间和内存中的对 象&#xff0c;已被GC的对象&#xff0c;反向查看分配的堆栈(如100个String对象分别由哪几…

本征费米能级 费米-狄拉克

导带中的费米浓度 在半导体物理中&#xff0c;导带中的费米浓度 n 0 n_0 n0​ 和价带中的空穴浓度 p 0 p_0 p0​ 是描述半导体中载流子&#xff08;电子和空穴&#xff09;数量的重要参数。在热平衡状态下&#xff0c;它们之间的关系由费米-狄拉克统计给出。 公式解释 导带…

eclipse maven打包报错: 致命错误: 在类路径或引导类路径中找不到程序包 java.lang的解决

还是上来帖张图&#xff1a; 1、系统之前是运行在mac上的&#xff0c;打包一切正常&#xff0c;但是现在在win11的eclipse打包就报错了。 2、致命错误: 在类路径或引导类路径中找不到程序包 java.lang&#xff0c;上面的问题应该是找不到java中的jar中的class导致。 解决&…