9.设置默认资源

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

×

喜欢就点赞,疼爱就打赏