9.资源更新-设置默认资源
9.1 知识点
设置默认资源需求分析
- 主要目标:可以选择资源作为默认资源保存到 StreamingAssets 文件夹,并且为它们生成资源对比文件
- 在 Unity 菜单中添加一个功能按钮触发该功能(知识点:MenuItem 特性)
- 获取在 Project 窗口选择的资源信息(知识点:Selection 类)
- 将选择到的资源复制到 StreamingAssets 文件夹中(知识点:AssetDatabase 类)
- 为 StreamingAssets 文件夹中的 AB 资源生成资源对比文件(知识点:文件写入)
创建移动选中资源到 StreamingAssets 中类和方法,点击按钮时遍历选中的资源判断是否是 AB 包丢到 StreamingAssets 中,并自动生成资源对比文件
public class MoveABToSA
{
[MenuItem("AB包工具/移动选中资源到StreamingAssets中")]
private static void MoveABToStreamingAssets()
{
// 通过编辑器 Selection 类中的方法获取在 Project 窗口中选中的资源
Object[] selectedAsset = Selection.GetFiltered(typeof(Object), SelectionMode.DeepAssets);
// 如果一个资源都没有选择就没有必要处理后面的逻辑了
if (selectedAsset.Length == 0)
return;
// 用于拼接本地默认 AB 包资源信息的字符串
string abCompareInfo = "";
// 遍历选中的资源对象
foreach (Object asset in selectedAsset)
{
// 通过 AssetDatabase 类获取资源的路径
string assetPath = AssetDatabase.GetAssetPath(asset);
// 截取路径当中的文件名用于作为 StreamingAssets 中的文件名
string fileName = assetPath.Substring(assetPath.LastIndexOf('/'));
// 判断是否有 . 符号,如果有证明有后缀,不处理
if (fileName.IndexOf('.') != -1)
continue;
// 你还可以在拷贝之前去获取全路径,然后通过 FileInfo 去获取后缀来判断,这样更加准确
// 利用 AssetDatabase 中的 API 将选中文件复制到目标路径
AssetDatabase.CopyAsset(assetPath, "Assets/StreamingAssets" + fileName);
// 获取拷贝到 StreamingAssets 文件夹中的文件的全部信息
FileInfo fileInfo = new FileInfo(Application.streamingAssetsPath + fileName);
// 拼接 AB 包信息到字符串中
abCompareInfo += fileInfo.Name + " " + fileInfo.Length + " " + CreateABCompare.GetMD5(fileInfo.FullName);
// 用一个符号隔开多个 AB 包信息
abCompareInfo += "|";
}
// 去掉最后一个 | 符号为了之后拆分字符串方便
abCompareInfo = abCompareInfo.Substring(0, abCompareInfo.Length - 1);
// 将本地默认资源的对比信息存入文件
File.WriteAllText(Application.streamingAssetsPath + "/ABCompareInfo.txt", abCompareInfo);
// 刷新窗口
AssetDatabase.Refresh();
}
}
9.2 知识点代码
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEditor;
using UnityEngine;
public class MoveABToSA
{
[MenuItem("AB包工具/移动选中资源到StreamingAssets中")]
private static void MoveABToStreamingAssets()
{
//通过编辑器Selection类中的方法 获取再Project窗口中选中的资源
Object[] selectedAsset = Selection.GetFiltered(typeof(Object), SelectionMode.DeepAssets);
//如果一个资源都没有选择 就没有必要处理后面的逻辑了
if (selectedAsset.Length == 0)
return;
//用于拼接本地默认AB包资源信息的字符串
string abCompareInfo = "";
//遍历选中的资源对象
foreach (Object asset in selectedAsset)
{
//通过Assetdatabase类 获取 资源的路径
string assetPath = AssetDatabase.GetAssetPath(asset);
//截取路径当中的文件名 用于作为 StreamingAssets中的文件名
string fileName = assetPath.Substring(assetPath.LastIndexOf('/'));
//判断是否有.符号 如果有 证明有后缀 不处理
if (fileName.IndexOf('.') != -1)
continue;
//你还可以在拷贝之前 去获取全路径 然后通过FIleInfo去获取后缀来判断 这样更加的准确
//利用AssetDatabase中的API 将选中文件 复制到目标路径
AssetDatabase.CopyAsset(assetPath, "Assets/StreamingAssets" + fileName);
//获取拷贝到StreamingAssets文件夹中的文件的全部信息
FileInfo fileInfo = new FileInfo(Application.streamingAssetsPath + fileName);
//拼接AB包信息到字符串中
abCompareInfo += fileInfo.Name + " " + fileInfo.Length + " " + CreateABCompare.GetMD5(fileInfo.FullName);
//用一个符号隔开多个AB包信息
abCompareInfo += "|";
}
//去掉最后一个|符号 为了之后拆分字符串方便
abCompareInfo = abCompareInfo.Substring(0, abCompareInfo.Length - 1);
//将本地默认资源的对比信息 存入文件
File.WriteAllText(Application.streamingAssetsPath + "/ABCompareInfo.txt", abCompareInfo);
//刷新窗口
AssetDatabase.Refresh();
}
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com