Cómo empaquetar archivos específicos en un proyecto de unidad

Cómo empaquetar archivos específicos en un proyecto de unidad

Permítanme declarar que esta es la primera vez que Ben Xiaobai escribe un blog. Espero incluir las deficiencias. Por favor señale cualquier error. Estoy agradecido.
A veces obtenemos un proyecto de juego con muchos recursos ricos. A veces queremos encontrar todos los archivos de audio en este proyecto, ¿es demasiado difícil encontrar uno por uno? (Pero si el proyecto original se ha ordenado y ordenado bien, entonces no es necesario hacerlo Luchando)
Vaya directamente al código, debería poder entenderlo
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);
              }
          }
      }
  }
}

Cada uno de los tres métodos tiene ventajas:

El primero es el método de empaquetado que viene con unity. Si empaqueta el archivo prefabricado, puede seleccionar ExportPackageOptions en la forma de IncludeDependencies (para evitar la pérdida de scripts o algo así) ^ _ ^

El segundo es usar la secuencia de archivos para leer

El tercero es empaquetar todos los recursos específicos en archivos Unitypackage

ps: Una cosa para recordar es que si el archivo de destino empaquetado es el proyecto de unidad actual, puede que no sea un archivo de audio. Es porque no hay un archivo meta generado ... TnT ...

En este artículo acabo de empaquetar los archivos de audio. Si está interesado, puede intentar empaquetar otros archivos (como qué video, prefabricados, etc.);

La primera vez que escribo un blog, ignoro la unidad, pero creo que hay algunas cosas que deberían compartirse, para que tanto tú como yo podamos aprender rápidamente, ¿no? 

Supongo que te gusta

Origin blog.csdn.net/K20132014/article/details/50885669
Recomendado
Clasificación