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
{
//编辑器中创建菜单选项(编辑器中点击Assets中的Build AssetBundles开始构建)
[MenuItem("Assets/Build AssetBundles")]

static void BuildAllAssetBundles()
{
string assetBundleDirectory = "Assets/AssetBundles";
if (!Directory.Exists(assetBundleDirectory))
{
Directory.CreateDirectory(assetBundleDirectory);
}
BuildPipeline.BuildAssetBundles(assetBundleDirectory,BuildAssetBundleOptions.None,
BuildTarget.StandaloneWindows);
}
}
打包出来的文件

 

3. 打包注意事项
AssetBundle打包命名可以通过“/”划分文件夹分类打包。

 

 

4. 本地文件加载AssetBundle包及资源
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;

public class LoadFromFile : MonoBehaviour
{
void Start()
{
var myLoadedAssetBundle
= AssetBundle.LoadFromFile("Assets/AssetBundles/ground.assetbundle");

if (myLoadedAssetBundle == null)
{
Debug.Log("Failed to load AssetBundle!");
return;
}
//加载指定资源
var prefab = myLoadedAssetBundle.LoadAsset<GameObject>("Cube");
Instantiate(prefab);

//加载全部资源
Object[] obj = myLoadedAssetBundle.LoadAllAssets();
foreach(Object i in obj)
{
Instantiate(i);
}
}
}
未完待续.................................

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!