unity AssetBundle打包完整代码(可直接用)

本文提供了Unity AssetBundle的完整打包代码示例,可直接应用于项目中,帮助开发者实现资源的高效管理和加载。

unity AssetBundle打包完整代码(可直接用)

using System.IO;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using System.Text;

public class Tools : Editor
{
    // Version File
    private static string _VersionFile = "xversion";

    // AB 包目录
    private static string _ABFilePath = Path.Combine(Application.dataPath, "AB");

    [MenuItem("Assets/Config AssetBundles")]
    static void ConfigAllAssetBundles()
    {
        UnityEngine.Object[] objs = Selection.GetFiltered<UnityEngine.Object>(SelectionMode.Assets);
        foreach (var item in objs)
        {
            Debug.Log(item.name);
            string path = AssetDatabase.GetAssetPath(item);
            Debug.Log(path);
            AssetImporter ai = AssetImporter.GetAtPath(path);
            ai.assetBundleName = item.name;
            ai.assetBundleVariant = "ab";
        }
    }

    [MenuItem("Assets/Build AssetBundles")]
    public static void OnBuildAB()
    {
        //EditorUtility.DisplayDialog("Success", "开始打包~~", "OK");

        if (Directory.Exists(_ABFilePath))
        {
            Directory.Delete(_ABFilePath, true);
        }
        Directory.CreateDirectory(_ABFilePath);

        BuildPipeline.BuildAssetBundles("Assets/AB", BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows64);

        PackageAllAssetBundles();
    }

    [MenuItem("Assets/Build Android AssetBundles")]
    public static void OnBuildAB_Android()
    {
        //EditorUtility.DisplayDialog("Success", "开始打包~~", "OK");

        if (Directory.Exists(_ABFilePath))
        {
            Directory.Delete(_ABFilePath, true);
        }
        Directory.CreateDirectory(_ABFilePath);

        BuildPipeline.BuildAssetBundles("Assets/AB", BuildAssetBundleOptions.None, BuildTarget.Android);

        PackageAllAssetBundles();
    }

    [MenuItem("Assets/Build iOS AssetBundles")]
    public static void OnBuildAB_iOS()
    {
        //EditorUtility.DisplayDialog("Success", "开始打包~~", "OK");

        if (Directory.Exists(_ABFilePath))
        {
            Directory.Delete(_ABFilePath, true);
        }
        Directory.CreateDirectory(_ABFilePath);

        BuildPipeline.BuildAssetBundles("Assets/AB", BuildAssetBundleOptions.None, BuildTarget.iOS);

        PackageAllAssetBundles();
    }
//生成名为XVersion的版本文件(供对比更新使用)
    [MenuItem("Assets/Generate Version File")]
    static void PackageAllAssetBundles()
    {
        using (FileStream fs = File.Open(Application.dataPath + "/AB/" + _VersionFile, FileMode.OpenOrCreate))
        {
            string line = "";
            string[] files = Directory.GetFiles(_ABFilePath, "*.ab", SearchOption.AllDirectories);
            foreach (string file in files)
            {
                // 文件名
                string file_name = Path.GetFileNameWithoutExtension(file);

                // 文件MD5
                string md5 = utils.GetMD5FromFile(file);

                // 文件大小
                FileInfo f = new FileInfo(file);
                long size = f.Length;

                // 生成
                line = line + file_name + "|" + md5 + "|" + size + "\r\n";
            }
            byte[] bits = Encoding.UTF8.GetBytes(line);
            fs.Write(bits, 0, bits.Length);
        }

        EditorUtility.DisplayDialog("Success", "资源打包成功~~", "OK");
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值