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

来源:互联网 发布:网络服务器机柜 品牌 编辑:程序博客网 时间:2024/04/28 16:30

如何将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
原创粉丝点击