如何将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也是懵懵懂懂的状态,但是我觉得有些东西应该分享,这样于你于我,都能快速学习.是吧?