Resource原理

项目中建立Resources目录,资源导入内部

生成项目包

资源文件存储路径

结论:存储在Resources下的资源,最终会存储在游戏的主体包中,发送给用户,手机系统上,如果需要做资源的更新,是无法使用Resources即时更新(不需要关闭手机游戏,即可实现游戏更新)

崩坏3(应用商店重新下载)

王者荣耀(游戏内直接更新)

AssetBundle(简称AB包)

AB包是独立于游戏主包存在的资源存储文件,使用内部资源时,需要单独下载和加载 。

AB包和Resources的区别

存储

Resources内部资源存储在游戏的发布包中

AB包存储在独立的文件中(AB包存储在非特殊目录下时,不在游戏的发布包中)

加载

Resources内部资源使用Resources.Load();

AB包(可以理解为可下载的Resources)

*获得AB包文件(下载,解压streaming拷贝到可写目录)

通过AB包文件路径,加载AB包文件

通过名称(资源名称),加载内部资源

AssetBundle的定义

AssetBundle是把一些资源文件,场景文件或二进制文件以某种紧密的方式(浅显理解例:压缩包)保存在一起的一些文件。

AssetBundle内部不能包含C#脚本文件,AssetBundle可以配合Lua实现资源和游戏逻辑代码的更新

热更新

不关闭Unity应用的前提,实现游戏资源和代码逻辑的更新。

AB包的创建

资源导入项目

如果资源未来做更新(资源存储在AB包中),就不要将资源放置在Resources目录下

资源配置

选中需要添加AB包的资源,填写或选择已存在的AB包名称

AB包配置修改后或AB内部的资源修改后,都需要重新生成AB包

AB包导出工具

创建Editor文件夹,在该文件夹内编写Editor脚本导出AB包,具体代码如下:

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using UnityEditor;

using System.IO;

public class ExportAB

{

[MenuItem("AB包/导出")]

public static void Export()

{

//项目的Assets路径

//D:/Unity_Project/GameUI/Assets

string path = Application.dataPath;

//D:/Unity_Project/GameUI/

path = path.Substring(0, path.Length - 6)+"ab";

Debug.Log(path);

//防止路径不存在

if(!Directory.Exists(path))

{

Directory.CreateDirectory(path);

}

//导出AB包的核心代码,生成AB包文件

//参数1:AB包文件存储路径,参数2:导出选项,参数3:平台(不同平台AB包不同)

BuildPipeline.BuildAssetBundles(

path,

BuildAssetBundleOptions.None,

BuildTarget.StandaloneWindows

);

}

}

编辑器下执行如下:

选择导出后Unity开始为你导出AB包到预期的文件路径

AB包名称如果配置成这样的结构“ui/package",ui会作为AB包存储的父目录,package是AB包的名称

AB包压缩方式

不压缩:AB包比较大,加载速度快(CPU不用运算解压缩)

LZMA算法压缩:默认压缩模式,文件尺寸居中,加载速度居中

LZ4算法压缩:5.3以后可用,压缩比例高,文件小,加载速度偏慢

依赖关系

如果一个AB(名称A)包,使用到了另一个AB(名称B)包的资源,那么两个AB包就产生了依赖关系。也就是A依赖于B。

编写顶部菜单栏按钮

AB包分平台,所以导出的API不同

Android

iOS

Windows

Mac

BuildPipeline.BuildAssetBundles

AB存储路径

导出选项

None:无任何选项

UncompressedAssetBundle:默认LZMA,开启这个选项就不会压缩AB包

CollectDependencies:默认开启,开启依赖记录机制

在Unity中加载AB包文件

编写配置文件脚本Config和加载脚本,对应代码如下:

//配置文件

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class Config

{

//配置AB包存储的路径

public static string ABPath = Application.dataPath.Substring(0, Application.dataPath.Length-6)+"ab";

}

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using UnityEngine.UI;

public class SimpleLoad : MonoBehaviour

{

// Start is called before the first frame update

void Start()

{

//第一步加载ab文件

AssetBundle ab = AssetBundle.LoadFromFile(Config.ABPath+"/test3");

//Debug.Log(Config.ABPath + "/test1");

//第二步加载资源

Sprite sp = ab.LoadAsset("Item");

Debug.Log(sp.name);

GameObject.Find("/Canvas/Image").GetComponent().sprite=sp;

}

}

运行结果如下所示:

发现已导出的AB包文件可正常加载 。

该系列专栏为网课课程笔记,仅用于学习参考。

Copyright © 2088 樊振东世界杯_世界杯开幕 - tyzksb.com All Rights Reserved.
友情链接