如何将unity的project中的特定文件打包

如何将unity的project中的特定文件打包

声明一下,本小白第一次写博客,不足之处,还望包含,有错误请指出,感激不尽.
有时候我们得到一个游戏项目,里面有很多丰富的资源.有时候我们想要这个工程里面的所有音频文件,一个一个找是不是太麻烦(可是如果原项目已经分类整理Ok了,那就不必如此大动干戈)
直接上代码,应该能看的懂
using UnityEngine;
using System.Collections;
using UnityEditor;
using System.IO;
using System.Collections.Generic;
public class Bundle  {
    [MenuItem("Tools/SaveAudioClip")]
    static void SavePos()
    {
       //--保存路径(可以自定义路径)
        string outpath = @"C:\Users\Username\Desktop\MyAudio\";
       //物体列表
        List<Object> objList = new List<Object>();
       //--获取当前工程下的文件所有文件路径
        string[] paths = Directory.GetFiles("Assets","*.*",SearchOption.AllDirectories);
        foreach (var path in paths)
        {
            //--剔除meta文件
            if (Path.GetExtension(path) != null && Path.GetExtension(path) != ".meta")
            {
                Object obj=AssetDatabase.LoadAssetAtPath<Object>(path);
                objList.Add(obj);
            }
        }
        //创建文件夹
        if (!File.Exists(outpath))
            Directory.CreateDirectory(outpath);

        List<string> audiopath = new List<string>();
        //--遍历所有的物体对象
        foreach (var item in objList)
        {
            //--如果是音频文件
            if (item is AudioClip)
            {
                string itemPath = AssetDatabase.GetAssetPath(item);
                string extension= Path.GetExtension(itemPath);
                audiopath.Add(AssetDatabase.GetAssetPath(item));
                //--第一种方法
                //AssetDatabase.ExportPackage(itemPath, outpath + item.name + extension);
                //第二种方法:利用流文件完成导出
                CopyFile(itemPath, outpath + item.name);
            }
        }
        //第三种方法:把整个打包成unitypackage文件
        AssetDatabase.ExportPackage(audiopath.ToArray(),outpath+"name"+".unitypackage",ExportPackageOptions.Default);
        Debug.Log("完成打包");
    }
    /// <summary>
    /// 复制文件到新的目录
    /// </summary>
    /// <param name="soucre">原文件</param>
    /// <param name="target">目标文件</param>
   static void CopyFile(string soucre, string target)
  {
      //1、读取的流
      using (FileStream fsRead = new FileStream(soucre, FileMode.Open, FileAccess.Read))
      {
          //2、写入的流
          using (FileStream fsWrite = new FileStream(target, FileMode.OpenOrCreate, FileAccess.Write))
          {
              //--指定读取大小
              byte[] buffer = new byte[1024 * 1024];
              while (true)
              {
                  int r = fsRead.Read(buffer, 0, buffer.Length);
                  if (r == 0)
                      break;     
                  fsWrite.Write(buffer, 0, r);
              }
          }
      }
  }
}

三种方法各有优点:

第一种是unity自带的打包方式,如果打包prefab文件,可以将ExportPackageOptions选择成IncludeDependencies形式(防止流失脚本什么的)^_^

第二种是利用文件流读取

第三种是将所有的特定资源打包成unitypackage文件

ps:提醒一点的是如果打包的目标文件是当前unity工程,那么可能就不是音频文件哦,是因为木有生成meta文件的缘故吧.............TnT..

这篇本人只是对音频文件做了打包,如果有兴趣,看官可以试试将其他的文件打包(例如什么视频,prefab等等);

第一次写博客,对于unity也是懵懵懂懂的状态,但是我觉得有些东西应该分享,这样于你于我,都能快速学习.是吧? 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值