assetbundle

还在用难用的AssetBundle?快来运用Unity新的可寻址资源系统,助力游戏开发

白昼怎懂夜的黑 提交于 2019-12-03 04:19:54
Unity Addressables可寻址资源系统是一个强大的Unity资源包,它能够帮助解决游戏开发中最重要的一些挑战: 高效率和轻松的内容管理 。 在管理游戏资源时,往往很难维持好的标准,从而避免让项目变得杂乱无章。最主要的问题在于不同职责的资源管理系统之间的耦合。而且,项目中资源的存储,加载和载入后资源的使用方法都有紧密的联系。 例如:我们可能要在Resources文件夹存储某个精灵。这会让Unity在构建版本时,把精灵存到特定的存档文件中。由于精灵存在了这样的位置,我们必须通过Resources API来加载该精灵。 项目变得混乱的速度比你想象的更快,一种方法的选择将造成项目长期的结果。一个好的系统会避免我们轻易犯下草率的错误,一个优秀的系统也会易于学习和使用。 通过使用Unity Addressables可寻址资源系统,我们可以将资源管理问题分离。我们的目标是保持灵活性,同时让项目具有可维护性。 本文,我们将介绍开发者使用Unity Addressables可寻址资源系统创作游戏时,会获得的三个好处。 好处1:减少游戏的内存压力 在发布游戏时,大多数平台都会让开发者提供玩游戏所需的最低硬件配置要求,以便玩家在购买时参考。 原因很简单:要求的硬件配置越高,购买游戏的玩家会越少。而从另一个角度看,实现的内存管理越好,我们便可在游戏提供更多内容和乐趣。 Unity

Unity AssetBundle 杂记

跟風遠走 提交于 2019-12-02 15:49:42
部分文档翻译内容 AssetBundle fundamentals Overview AssetBundle 系统负责资产动态加载, 不能更新代码. AssetBundle Layout 包含两部分: 头 和 数据段 . 头 包括 identifier, compression type and a manifest. Manifest 是一个以 Object 名字作为键值的查找表. 大部分平台上是 平衡搜索树 实现的, Window 和 OSX 的衍生平台(iOS)上是红黑树. 数据段是资产的序列化数据. LZMA 对所有序列化后的资产一起压缩, LZ4 对资产分开独立压缩. Unity 5.3 之前, 不能对一个 bundle 内的数据独立压缩, 要读去必须对整个 bundle 全部解压. Loading AssetBundles AssetBundle.LoadFromMemory(Async) 不推荐 AssetBundle.LoadFromFile(Async) 最高效的加载未压缩或者使用 LZ4 压缩的 bundle. 在桌面, 主机和手机平台上, LoadFromFile 都只会加载 AssetBundle 头, 数据段部分仍然在磁盘上. AssetBundle 里的对象使用方法 AssetBundle.Load 按需加载. 在 Editor 中该接口会把

Unity 3D热更新知识入门小结之AssetBundle(1)

浪子不回头ぞ 提交于 2019-12-01 19:39:44
一、AssetBundle定义及作用 1. AssetBundle是一个压缩包,相当于一个文件夹,包含特定于平台的非代码的归档文件(模型、贴图、预制体、声音及场景 ),在游戏运行时候就会被加载。AssetBundle的文件是分为A serialized file和Resource files两类。 (1)A serialized file(序列化文件):资源被分解到它们各自的对象中,并写入到这个单个文件中。 (2)Resource files(资源文件):特定二进制资源(图片和声音)单独保存以便于加载。 2. AssetBundle能够表示相互间的依赖关系,其压缩包通常是采用LZMA和LZ4压缩算法,目的就是减少包的大小,从而可以满足更快网络速率的传输。 3. AssetBundles可以用来下载内容(DLC),加载针对使用用户平台的优化资产并减少运行时内存压力,即是减小安装包的大小。 二、AssetBundle使用流程 1. 流程 (1)指定资源的AssetBundle属性; (2)开始构建AssetBundle包; (3)上传AssetBundle包到相应的服务器; (4)用户游戏加载AssetBundle包及资源。 2. 代码打包方法 using UnityEditor; using System.IO; public class CreateAssetBundle { /

Unity3D内存释放

不羁的心 提交于 2019-11-30 21:12:26
最近网友通过网站搜索 Unity3D 在手机及其他平台下占用内存太大. 这里写下关于 unity3d 对于内存的管理与优化. Unity3D 里有两种动态加载机制:一个是Resources.Load,另外一个通过AssetBundle,其实两者区别不大。 Resources.Load就是从一个缺省打进程序包里的AssetBundle里加载资源,而一般AssetBundle文件需要你自己创建,运行时 动态加载,可以指定路径和来源的。 其实场景里所有静态的对象也有这么一个加载过程,只是Unity3D后台替你自动完成了。 详细说一下细节概念: AssetBundle运行时加载: 来自文件就用CreateFromFile(注意这种方法只能用于standalone程序)这是最快的加载方法 也可以来自Memory,用CreateFromMemory(byte[]),这个byte[]可以来自文件读取的缓冲,www的下载或者其他可能的方式。 其实WWW的assetBundle就是内部数据读取完后自动创建了一个assetBundle而已 Create完以后,等于把硬盘或者网络的一个文件读到内存一个区域,这时候只是个AssetBundle内存镜像数据块,还没有Assets的概念。 Assets加载: 用AssetBundle.Load(同Resources.Load)

unity内存管理(转)

℡╲_俬逩灬. 提交于 2019-11-27 12:54:44
转自: https://www.cnblogs.com/zsb517/p/5724908.html Unity3D 里有两种动态加载机制:一个是Resources.Load,另外一个通过AssetBundle,其实两者区别不大。 Resources.Load就是从一个缺省打进程序包里的AssetBundle里加载资源,而一般AssetBundle文件需要你自己创建,运行时 动态加载,可以指定路径和来源的。 其实场景里所有静态的对象也有这么一个加载过程,只是Unity3D后台替你自动完成了。 详细说一下细节概念: AssetBundle运行时加载: 来自文件就用CreateFromFile(注意这种方法只能用于standalone程序)这是最快的加载方法 也可以来自Memory,用CreateFromMemory(byte[]),这个byte[]可以来自文件读取的缓冲,www的下载或者其他可能的方式。 其实WWW的assetBundle就是内部数据读取完后自动创建了一个assetBundle而已 Create完以后,等于把硬盘或者网络的一个文件读到内存一个区域,这时候只是个AssetBundle内存镜像数据块,还没有Assets的概念。 Assets加载: 用AssetBundle.Load(同Resources.Load)

Unity AssetBundle 踩坑记录

陌路散爱 提交于 2019-11-27 09:46:22
Unity AssetBundle 踩坑记录 editor 下选择什么平台的 ab 加载 Material doesn't have a color property '_Color' UnityEditor.DockArea:OnGUI() Material doesn't have a float or range property 'PixelSnap' UnityEditor.DockArea:OnGUI() 因为editor模式下所有的 platform ab 都是可以用的 并且打 android ab 包必须要把platform转换为android 但是自己写的cg shader 如果打成 android ab 在editor 模式下没有OpenGL 2.0 环境会报错 只有打成windows包 但是好像其他 surface shader 是可以的 参考 关于打包shader丢失参数的问题 The asset bundle ' ' can't be loaded because another asset bundle with the same files are already loaded create scene assetbundle Scenes/battle/MapEditor/53.unityin _LoadImmediate failed 可能的原因

Build and load Assetbundles in Unity

為{幸葍}努か 提交于 2019-11-26 17:51:59
I cannot get Unity Assetbundles working in an iOS build. In Unity I build the assetbundles: using UnityEditor; public class CreateAssetBundles { [MenuItem("Assets/Build AssetBundles")] static void BuildAllAssetBundles() { BuildPipeline.BuildAssetBundles("Assets/AssetBundles", BuildAssetBundleOptions.None, BuildTarget.iOS); } } And they work fine in Unity. using them with AssetBundle bundleLoadRequest = AssetBundle.LoadFromFile("file://" + Application.dataPath + "/AssetBundles/iOS/" + myassetbundlename.ToString()); and/or WWW wwww = WWW.LoadFromCacheOrDownload("file://" + Application.dataPath +

Build and load Assetbundles in Unity

无人久伴 提交于 2019-11-26 07:42:41
问题 I cannot get Unity Assetbundles working in an iOS build. In Unity I build the assetbundles: using UnityEditor; public class CreateAssetBundles { [MenuItem(\"Assets/Build AssetBundles\")] static void BuildAllAssetBundles() { BuildPipeline.BuildAssetBundles(\"Assets/AssetBundles\", BuildAssetBundleOptions.None, BuildTarget.iOS); } } And they work fine in Unity. using them with AssetBundle bundleLoadRequest = AssetBundle.LoadFromFile(\"file://\" + Application.dataPath + \"/AssetBundles/iOS/\" +