Unity的资源加载以及AssetBundle的一些坑
https://www.cnblogs.com/sigmadruid/p/4040803.html
- AssetBundle加载完毕,进行其中Asset的初始化后,不能立即Unload()。否则Asset的初始化会有问题,依赖关系会Missing。需要等待个1,2秒再Unload()。因为Instantiate()也有一个delay,尽管它可以立即返回一个GameObject对象。
- Static Batch只对预先在场景中摆好的静态对象起作用。运行时加载的对象则可能会失效。这时可以调用StaticBatchingUtility.Combine(GameObject root);手动触发Static Batch。
- 光照贴图的uv信息保存在Mesh的uv2属性上,是一个Vector2[]。模型的导入选项中,如果勾选Generate Lightmap UV会自动生成这些uv信息。但是在将模型打包到AssetBundle时这些uv会丢失。可以使用配置文件手动记录。在加载这些模型时,再通过代码将它们恢复。
- 模型的name(gameObject.name)和它的Mesh的name(gameObject.renderer.mesh.name)是不一样的。
- AssetBundle打包出来的粒子可能会丢失Shader。只要在打包的项目中,把可能用到的Shader加入到Edit->Project Settings->Graphics->Always Included Shaders这个列表里就行了。
- AssetBundle里的资源会随着AssetBundle的卸载而从内存消失。
这是个恶心的问题。考虑一种情况,你有3个AssetBundle:A保存Prefab,B保存Mesh,C保存Texture和Material。依赖关系是A->B->C。于是你依次载入C,B,A,再把A里的Prefab给Instantiate一个,就会得到完整的GameObject。这时,你想这仨AssetBundle不要了卸了吧。卸载完,你发现Mesh,Texture,Material都没了。因为B,C里的资源是都被依赖的,但是卸载时缺没有被考虑到。但是你要是将B,C的东西也Instantiate各一份出来,依赖关系就没了,只能自己添加。
因此,建议相关的资源最好打成一个AssetBundle。这样依赖关系是稳定的。或者你自己维护一个依赖关系。这事儿你要指着Unity,还真不太靠谱。
- 不要将循环迭代的变量传入到循环中的闭包函数中。因为迭代变量会被循环改写。可以在循环内创建一个局部变量来存储该变量。因为闭包使用外部参数的机制本质还是记录内存地址。这种错误在你循环初始化一些资源,并且在回调时才能得到的情况下,很容易遇到。
- 在编辑器模式中,对Resources目录中内容修改后,需要AssetDataBase.Refresh()后才能使用Resources.Load()读取到其中的内容。
- 通过AssetBundle读取的资源,例如通过Load(),LoadAll()和mainAsset,是不能进行Destroy的。当AssetBundle被卸载时,会被一起析构。最好先Instantiate()出来一份再使用。Texture2D、Mesh这样的资源,需要在导入选项里勾选Read/Write Enabled。
- 一些GameObject如果被MonoBehavior的变量(数组,List,Dictionary等)持有,则必须在OnDestroy()时手动析构它们。否则会造成内存泄露。
- Prefab之间不会建立依赖,即如果Prefab-A和Prefab-B引用了同一张纹理,而他们设置了不同的abName,而共享的纹理并未设置abName,那么Prefab-A和Prefab-B可视为分别打包,各自Bundle中都包含共享的纹理。因此在使用UGUI,开启Sprite Packer时,由于Atlas无法标记abName,在设置UI界面Prefab的abName时就需要注意这个问题。5.x中加入了Shader stripping功能,在打包时,默认情况下会根据当前场景的Lightmap及Fog设置对资源中的Shader进行代码剥离。这意味着,如果在一个空场景下进行打包,则Bundle中的Shader会失去对Lightmap和Fog的支持,从而出现运行时Lightmap和Fog丢失的情况.而通过将Edit->Project Settings->Graphics下shader Stripping中的modes改为Manual,并勾选相应的mode即可避免这一问题。
Unity的资源加载以及AssetBundle的一些坑的更多相关文章
- Unity -- AssetBundle(本地资源加载和加载依赖关系)
1.本地资源加载 1).建立Editor文件夹 2).建立StreamingAssets文件夹和其Windows的子文件夹 将下方第一个脚本放入Editor 里面 脚本一 资源打包AssetBund ...
- 详谈 Unity3D AssetBundle 资源加载,结合实际项目开发实例
第一次搞资源更新方面,这里只说更新,加载,AssetBundle资源加载,谈谈自己的理解,以及自己在项目中遇到的那些神坑,现在回想一下,真的是自己跪着过来的,说多了,都是泪. 我这边是安卓AssetB ...
- AssetBundle使用心得【资源加载】
0.资源加载方式 静态资源 Asset下所有资源称为静态资源 Resources资源 Resources目录下,通过实例化得到的资源 AssetBundle资源 又称为增量更新资源 1.什么是Asse ...
- 细谈unity资源加载和卸载
转载请标明出处:http://www.cnblogs.com/zblade/ 一.概要 在了解unity的资源管理方式之后,接下来细谈一下Unity的资源是如何从磁盘中加载到运行时的内存中,以及又是如 ...
- 升级MAC OS到10.13, 10.14系统后UNITY工程无法加载资源的解决办法
升级MAC OS到10.13, 10.14系统后,出现UNITY工程无法加载资源的情况: Unity项目中Asset目录显示为空! 解决办法一: 打开Launchpad中的磁盘工具 (也就是实用工具下 ...
- Unity 全面理解加载和内存管理
最近一直在和这些内容纠缠,把心得和大家共享一下: Unity里有两种动态加载机制:一是Resources.Load,一是通过AssetBundle,其实两者本质上我理解没有什么区别.Resources ...
- Unity移动游戏加载性能和内存管理-学习笔记
前言 正在学习Doctor 张.鑫大佬的移动游戏加载性能和内存管理,内容非常非常的干,所以我烧了很多开水,边喝边看,一边拿小本几做好笔记 本文只是关于前2章的内容笔记,关于各种资源的加载耗时 纹理资源 ...
- Unity3D之Mecanim动画系统学习笔记(十):Mecanim动画的资源加载相关
资源加载是必备的知识点,这里就说说Mecanim动画的资源如何打包及加载. 注意,Unity4.x和Unity5.x的AssetBundle打包策略不一样,本笔记是基于Unity4.x的AssetBu ...
- UE4中资源加载资源的方式
在UNITY中,我们加载资源一般是通过Resources.Load(path).即可完成.该方法返回的是Object类型.如果你想要的是材质或者贴图等等,只要价格类型转换的关键字就可以了例如 as M ...
随机推荐
- Maven添加依赖后如何在IDEA中引用
使用idea打开/创建maven项目,可以正常使用maven命令编译发布,但idea里智能提示.代码均找不到包,原因是idea并未引用依赖的包,这时需要添加idea引用即可 解决方法 在IDEA右侧的 ...
- 优秀的java 社区
并发编程网 - ifeve.com InfoQ - 促进软件开发领域知识与创新的传播开源中国 - 找到您想要的开源项目,分享和交流IBM developerWorks 中国 : IBM's resou ...
- VBA分别使用MSXML的DOM属性和XPATH进行网页爬虫
本文要重点介绍的是VBA中的XmlHttp对象(MSXML2.XMLHTTP或MSXML.XMLHTTP),它可以向http服务器发送请求并使用微软XML文档对象模型Microsoft XML Doc ...
- js array 排序
数据 let data = [ {chinese: '蔡司', english: 'Chase',score:67}, {chinese: '艾伦', english: 'Allen',score:7 ...
- http://go.microsoft.com/fwlink/?linkid问题
今天不知怎的,打开一个网页出现了http://go.microsoft.com/fwlink/?linkid=XXX 烦死了,在百度搜了下方法,什么改注册表,策略模板等不见起效.其实打开IE的设置, ...
- vue创建组件的几种方法
<html> <head> <title>vue创建组件</title> <meta charset="utf-8"> ...
- Qt布局
常用的布局方法 1. 水平布局类 QHBoxLayout 2. 垂直布局类 QVBoxLayout 3. 网格布局类 QGridLayout QHBoxLayout 对象横向排列开 QVBoxLayo ...
- AJAX中错误代码解释以及http中的错误代码解释
xmlhttp.readyState的值及含义: 0:请求未初始化(还没有调用 open()). 1:请求已经建立,但是还没有发送(还没有调用 send()). 2:请求已发送,正在处理中(通常现在可 ...
- Windows——Office使用激活工具激活后仍提示激活
问题: Office使用激活工具激活后仍提示激活 分析: 造成该问题的原因通常是未删除操作系统预置Office导致的, 解决方案: 调出运行,输入regedit打开注册表编辑器, 依次打开 HKE ...
- kubernetes核心组件kube-proxy - 运维笔记
一. kube-proxy 和 service kube-proxy是Kubernetes的核心组件,部署在每个Node节点上,它是实现Kubernetes Service的通信与负载均衡机制的重 ...