Unity3D之AssetBundle资源加载封装
2015-04-29 10:40
375 查看
http://www.luzexi.com/unity3d%E4%B9%8Bassetbundle%E8%B5%84%E6%BA%90%E5%8A%A0%E8%BD%BD%E5%B0%81%E8%A3%85/
Unity3D之AssetBundle资源加载封装。在《临兵斗者三国志》中我使用了U3D的AssetBundle资源动态加载机制,原因是某些画面资源太多,IO阻塞过慢会造成游戏奔溃。在开发过程中,遇到点问题:
1.当资源更改变化时,如何能快速得反应到开发中。
解决方案:
我使用宏定义UNITY_EDITOR来判断是否是开发编辑状态。当处于开发编辑状态时,自动读取指定目录下U3D本身资源,而不使用AssetBundle。这样就达到了当prefb变化时能快速反应到开发编辑中。而当不是处于编辑状态时,则正常使用异步加载读取AssetBundle。这个方式唯一的毛病就是,必须让所有U3D程序员都非常清除明白,如果写错,编辑模式下会没问题,发布后会出问题,所以需要检查。
2.当不同资源之间有重复的资源时如何将AssetBundle空间占有量最小化。
解决方案:
GUI资源之间有特别多的重复的问题,挑出几个重复得特别厉害的,比如ICON图集,公用图集。在打包期间把他们设为共享资源,并在加载时首先加载共享资源,这样既节省了AssetBundle空间占有量,也节省了内存。这个方式的毛病是当你将资源更改要打包某个资源时,需要将所有与共享有关的资源重新打包一遍。
3.如何应对自动释放资源问题。
解决方案:
在游戏中有指定资源释放和自动释放所有AssetBundle资源以销毁内存(这里不是指销毁U3D内存,而是AssetBundle内存,U3D内存管理分图片内存,AssetBundle内存,编译程序)。销毁指定资源就按正常来没有争议。销毁所有资源就要有点措施了,因为有些资源是不能被销毁的,因为它们是共享资源,需要全程跟着游戏走,所以当自动销毁所有资源时,将共享资源排除在外。并且在销毁后调用Resources.UnloadUnusedAssets();和GC.Collect();
4.打包AssetBundle方式。
解决方案:
打包AssetBundle方式有几种:1.单资源打包,也就是说一个.prefb或Texture打一个包。2.多个资源打包,将某些资源都打成一个AssetBundle,节省了几个资源包之间的共享资源也减小了多个AssetBundle引起的空间扩大问题。但并不是说所有项目都是多个资源打成一个AssetBundle是好的。《临兵斗者三国志》就是一大部分使用单一打包,而共享资源使用多个资源打成一个AssetBundle的方式。
最后奉上本人对AssetBundle封装的源码。源码通过VS2010编写,通过打成DLL放在项目里使用。
AssetBundle资源加载封装源码
你也可以去我的github上查看找我做的一些源码插件,如果喜欢的话可以star或者fllow。
转发请注明出自:http://www.luzexi.com
Unity3D之AssetBundle资源加载封装。在《临兵斗者三国志》中我使用了U3D的AssetBundle资源动态加载机制,原因是某些画面资源太多,IO阻塞过慢会造成游戏奔溃。在开发过程中,遇到点问题:
1.当资源更改变化时,如何能快速得反应到开发中。
解决方案:
我使用宏定义UNITY_EDITOR来判断是否是开发编辑状态。当处于开发编辑状态时,自动读取指定目录下U3D本身资源,而不使用AssetBundle。这样就达到了当prefb变化时能快速反应到开发编辑中。而当不是处于编辑状态时,则正常使用异步加载读取AssetBundle。这个方式唯一的毛病就是,必须让所有U3D程序员都非常清除明白,如果写错,编辑模式下会没问题,发布后会出问题,所以需要检查。
2.当不同资源之间有重复的资源时如何将AssetBundle空间占有量最小化。
解决方案:
GUI资源之间有特别多的重复的问题,挑出几个重复得特别厉害的,比如ICON图集,公用图集。在打包期间把他们设为共享资源,并在加载时首先加载共享资源,这样既节省了AssetBundle空间占有量,也节省了内存。这个方式的毛病是当你将资源更改要打包某个资源时,需要将所有与共享有关的资源重新打包一遍。
3.如何应对自动释放资源问题。
解决方案:
在游戏中有指定资源释放和自动释放所有AssetBundle资源以销毁内存(这里不是指销毁U3D内存,而是AssetBundle内存,U3D内存管理分图片内存,AssetBundle内存,编译程序)。销毁指定资源就按正常来没有争议。销毁所有资源就要有点措施了,因为有些资源是不能被销毁的,因为它们是共享资源,需要全程跟着游戏走,所以当自动销毁所有资源时,将共享资源排除在外。并且在销毁后调用Resources.UnloadUnusedAssets();和GC.Collect();
4.打包AssetBundle方式。
解决方案:
打包AssetBundle方式有几种:1.单资源打包,也就是说一个.prefb或Texture打一个包。2.多个资源打包,将某些资源都打成一个AssetBundle,节省了几个资源包之间的共享资源也减小了多个AssetBundle引起的空间扩大问题。但并不是说所有项目都是多个资源打成一个AssetBundle是好的。《临兵斗者三国志》就是一大部分使用单一打包,而共享资源使用多个资源打成一个AssetBundle的方式。
最后奉上本人对AssetBundle封装的源码。源码通过VS2010编写,通过打成DLL放在项目里使用。
AssetBundle资源加载封装源码
你也可以去我的github上查看找我做的一些源码插件,如果喜欢的话可以star或者fllow。
转发请注明出自:http://www.luzexi.com
相关文章推荐
- Unity3D之AssetBundle资源加载封装
- Unity3D基础学习之AssetBundle 资源包创建与加载
- 详谈 Unity3D AssetBundle 资源加载,结合实际项目开发实例
- Unity3D 关于资源加载(Resources和AssetBundle)和内存管
- 【Unity3d】关于AssetBundle.CreateFromFile()方法加载资源失败解决方法
- Unity3D 关于资源加载(Resources和AssetBundle)和内存管理
- Unity3D AssetBundle 资源加载-IOS
- Unity3D之AssetBundle【3】AssetBundle资源加载管理器
- Unity3D基础学习之AssetBundle 资源包创建与加载
- Unity3d热更新全书-资源加载(一):从AssetBundle说起
- Unity3d发布Android版通过WWW加载本地AssetBundle资源
- Unity3d的AssetBundle打包——AssetBundle Browser(简单实现资源复用)
- [Unity3d]打包Assetbundle并加载
- Unity异步加载AssetBundle方案,4.x版本资源加载(5.x版本资源可以参考插件AssetBundleManager)
- Unity资源处理机制(Assets/WWW/AssetBundle/...)读取和加载资源方式详解
- unity之Asset Bundle资源打包加载
- [Unity3d]打包Assetbundle并加载
- ResourceManager(七)—— 打包AssetBundle然后从AssetBundle加载资源
- 一、创建Assetbundle 在unity3d开发的游戏中,无论模型,音频,还是图片等,我们都做成Prefab,然后打包成Assetbundle,方便我们后面的使用,来达到资源的更新。
- [Unity3D]BuildPipeline.PushAssetDependencies 打包依赖包,优化UI Prefab的资源引用加载