Unity3D之AssetBundle资源加载封装

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是好的。

时间: 2024-10-17 06:19:22

Unity3D之AssetBundle资源加载封装的相关文章

Unity3d热更新全书-资源加载(一)从AssetBundle说起

Unity3D动态下载资源,有没有解?有,AssetBundle就是通用解,任何一本书都会花大幅篇章来介绍AssetBundle. 我们也来说说AssetBundle 我们试全面的分析一下Unity3D提供的资源加载机制 1.Resources//内嵌资源,使用方法Resources.Load,可以加载任意种类的资源,不能动态修改,卒. 2.StreamingAssets//随包资源,使用方法IO或WWW.Load.WWW.Load可以加载任意种类资源,IO仅限bytes 和 text. 3.W

unity3d Resources.Load动态加载资源

初步整理并且学习unity3d资源加载方法,预计用时两天完成入门学习 Unity3d常用两种加载资源方案:Resources.Load和AssetBundle Resources.Load就是从一个缺省打进程序包里的AssetBundle里加载资源 而一般AssetBundle文件需要你自己创建,运行时动态加载,可以指定路径和来源的.其实场景里所有静态的对象也有这么一个加载过程,只是Unity后台替你自动完成 一:Resources.Load:使用这种方式加载资源,首先需要下Asset目录下创建

Unity3d热更新全书-加载(二)如何在不用AssetBundle的前提下动态加载预设

Unity3D的主要构成大家都知道,首先是场景图,场景图上的节点构成一颗树. 每个节点对应一个GameObject对象 然后每个GameObject有若干个组件 有一些组件会与资源产生关系,比如MeshRenderer会关联材质,材质会关联shader和贴图 场景图的一部分可以被保存为一个预设,prefab. 有时候我们会需要用预设去复用,而预设的加载似乎只能通过AB去打包,其实不然,这里我们有一个开源的库就可以解决这个问题. 为什么不使用AB,可以见上一篇,加载(一),不使用AB一份资源全平台

Unity3D之Mecanim动画系统学习笔记(十):Mecanim动画的资源加载相关

资源加载是必备的知识点,这里就说说Mecanim动画的资源如何打包及加载. 注意,Unity4.x和Unity5.x的AssetBundle打包策略不一样,本笔记是基于Unity4.x的AssetBundle进行打包的. 我们一般使用FBX类型的模型及动画文件,而动画文件的储存一般有两种情况,一是所有的动画和模型都一起存放到一个文件中,还有一种情况是模型单独一个文件而动画单独一个文件.这里我们就两种情况都看一下. 使用的资源是Unity3D自带的以及从一本教材中取出的两种类型的动画资源,同时需要

Assetbundle 打包加载及服务器加载等(采用unity3d5.0后的新版)

Assetbundle为资源包不是资源 打包1:通过脚本指定打包 AssetBundleBuild ab = new AssetBundleBuild { assetBundleName = PlayerSettings.bundleVersion + "@" + "zhao",//资源包assets的名字 assetNames = new string[1],  //包里的每个资源的名字 }; string outputPath = Path.Combine(Ut

【原创】我所理解的资源加载方式

最近转战unity3d,接的第一个任务就是关于资源管理的部分. 由于项目是web和standalone(微端)并存的,所以希望保证业务逻辑尽量保持一致,跟之前ios,android的执行流程略有不同,比如在web模式下,FILE类是被禁用的,所以指望通过写文件来操作相关功能参数的方法是不可行的.下面,是我对这方面的一些理解.本文中如果没有特殊说明,下载的资源都是AssetBundle web程序的运行流程大致是 首先加载web.html,这是整个程序的入口 他会加载相关的unity3d文件(本例

AssetBundle异步加载被中断的问题

刘 刘泰言创建于 1 年前 在使用异步接口 yield return AssetBundle.ASyncLoad的时候,难免会想到:这个异步处理完之前如何Cancel掉这个任务?也就是一个AssetBundle加载到一半,现在要放弃加载,应该怎么处理? UnityAssetBundle 赞同 0评论 分享 10条回复 曾 曾毅回答于 1 年前 无法CANCEL 赞同 1评论 分享 Walker回答于 1 年前 Unity的接口里没有中断操作,但是可以在自己项目的ABMgr模块给业务逻辑层提供一个

《Spring揭秘》(十) ---- ApplicationContext之统一资源加载策略

Spring的resource Spring框架内部使用Resource接口作为所有资源的抽象和接口.例如: BeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource("...")); ClassPathResource就是Resource的一个特定类型的实现,代表的实位于Classpath中的资源. Resource接口可以根据资源的不同类型,或者资源所处的不同场合,给出相应的具体实现: a. ByteArr

chromium kernel资源加载、解析、三树合成浅析(chromium39)

每次尝试去看看chromium kernel中具体逻辑的实现的时候,都会费一些时间去看代码,找逻辑.当然了,网上很多资料可以参看,但是每次看完这些资料,我都会要问一问:确实如此么?新版本的kernel是否这块逻辑更改了呢? 所以,为了让自己释惑,还是要亲自去看源码,一点点查看调用堆栈.然后再能在整体上理解下kernel的原理. 最近了看了看chromium kernel中,blink kernel part的网页的加载.html解析.以及三树(Dom tree. Render Tree.Rend