Unity AB包
AB包比对文件内容:
ab包名 包大小 包内容md5字符串
编辑器功能-设置默认资源:
可以选择资源作为默认资源保存到StreamingAssets文件夹并且为他们生成资源对比文件1. 在Unity菜单中添加一个功能按钮触发该功能(MenuItem特性)2. 获取在Project窗口选择的资源信息(Selection类)3. 将选择到的资源复制到StreamingAssets文件夹中(AssetDatabase类)4. 为StreamingAssets文件夹中的AB资源生成资源对比文件(文件写入)
是否需要进行streamingAssetsPath中资源转存到persistentDataPath 取决于你项目中的AB包管理器中的加载机制
1.若都从persistentDataPath中价值,则需要转存(若默认资源很多,会浪费玩家的硬盘存储空间)
2.若persistentDataPath中没有资源,则从streamingAssetsPath中加载,则无需转存(不会浪费玩家空间)
游戏客户端 | 资源服务器进入游戏后 -------------------------- AB包对比文件需要下载远端对比文件|和本地对比文件对比|---------------------------------|------------------------------------|第一次且有默认资源 第一次没有默认资源 非第一次streamingAssetsPath persistentDataPath| | |读取本地 下载所有远端对比文件 读取本地streamingAssetsPath 中AB包 persistentDataPath中对比文件对比 中对比文件对比下载指定AB包 下载指定AB包| | |---------------------------------------------------------------------------------------------AB包资源| | |将远端ab包对比文件更新到本地存储在persistentDataPath中
获取远端对比文件信息 两种做法:
- 保存到临时文件中,待AB包下载完成后,在用该临时文件覆盖本地对比文件
- 压根不保存文件,直接通过下载流读取字节数组数据转为字符串待ab包下载完后再保存本地资源对比文件
编辑器窗口
ABTools.cs 编辑器窗口代码:
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
using UnityEditor;
using UnityEngine;public class ABTools : EditorWindow
{private int nowSelIndex = 0;private string[] targetStrings = new string[] { "PC", "IOS", "Android" };//资源服务器默认IP地址private string serverIP = "ftp://192.168.31.178";[MenuItem("AB包工具/打开工具窗口")]private static void OpenWindow(){//获取一个ABTools 编辑器窗口对象ABTools windown = EditorWindow.GetWindowWithRect(typeof(ABTools), new Rect(0, 0, 350, 220)) as ABTools;windown.Show();}private void OnGUI(){GUI.Label(new Rect(10, 10, 150, 15), "平台选择");//页签显示 是从数组中取出字符串内容来显示 所以 需要改变当前选中的索引nowSelIndex = GUI.Toolbar(new Rect(10, 30, 250, 20), nowSelIndex, targetStrings);//资源服务器IP地址设置GUI.Label(new Rect(10, 60, 150, 15), "资源服务器地址");serverIP = GUI.TextField(new Rect(10, 80, 150, 20), serverIP);//创建对比文件 按钮if(GUI.Button(new Rect(10, 110, 100, 40), "创建对比文件"))CreateABCompareFile();//保存默认资源到StreamingAssets 按钮if (GUI.Button(new Rect(115, 110, 225, 40), "保存默认资源到StreamingAssets"))MoveABToStreamingAssets();//上传AB包和对比文件 按钮if (GUI.Button(new Rect(10, 160, 330, 40), "上传AB包和对比文件"))UploadAllABFile();}//生成AB包对比文件private void CreateABCompareFile(){//获取文件夹信息//要根据选择的平台读取对应平台文件夹下的内容 来进行对比文件的生成DirectoryInfo directory = Directory.CreateDirectory(Application