今回はUnityPackageの自動生成について書きたいと思います。
前提
私はUnityエディター拡張を作成するとき、1つのフォルダでまとめて管理しています。
RNFという独自のフォルダの中にEditorフォルダを用意し、その中に全てのエディター拡張をまとめて管理しています。
UnityPackageを自動生成させる
作成中のエディター拡張のうち、
「一部のエディター拡張だけを別のプロジェクトへインポートさせたい」
という状況がしばしば発生します。
目的のエディター拡張を手作業でコピーしてもいいですが、これは若干面倒くさいです。
そこで、RNF/Editor/以下にあるフォルダを一括でunitypackage化させることにしました。
UnityPackage自動生成スクリプト
unitypackageを一括生成させるため、以下のようなスクリプトを書きました。
namespace UnityPackageToolkit
{
using System.IO;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using UnityEditor;
public static class UnityPackageExporter
{
[MenuItem("Export/UnityPackage", false, 2)]
static public void ExportUnityPackage()
{
var exportRootPath = Path.Combine(Path.GetDirectoryName(Application.dataPath), "UnityPackages");
if (!Directory.Exists(exportRootPath)) { Directory.CreateDirectory(exportRootPath); }
// unitypackage化用の情報の作成
var exportDatas = Directory.GetDirectories(Application.dataPath + "/RNF/Scripts/Editor", "*") // RNF/Scripts/Editor以下のすべてのディレクトリ取得
.Select(dir =>
{
var inputFilePath = "Assets" + dir.Substring(Application.dataPath.Length);
var outputFilePath = Path.Combine(exportRootPath, Path.GetFileName(inputFilePath) + ".unitypackage");
return new ExportData { InputFilePath = inputFilePath, OutputFilePath = outputFilePath };
})
.ToList();
// RNFフォルダ自体もunitypackage化
exportDatas.Add(new ExportData
{
InputFilePath = "Assets/RNF",
OutputFilePath = Path.Combine(Path.GetDirectoryName(exportRootPath), "RNF.unitypackage"),
});
// unitypackageの作成
foreach (var data in exportDatas)
{
EditorUtility.DisplayProgressBar("Export Unitypackages", data.FolderName, 0f);
AssetDatabase.ExportPackage(data.InputFilePath, data.OutputFilePath, ExportPackageOptions.Recurse);
}
EditorUtility.ClearProgressBar();
EditorUtility.DisplayDialog("Export Unitypackages", "Complete", "OK");
// 保存先フォルダを開く
System.Diagnostics.Process.Start(exportRootPath);
}
private class ExportData
{
public string FolderName { get { return Path.GetFileName(InputFilePath); } }
public string InputFilePath;
public string OutputFilePath;
}
}
}
これを実行すると以下のようなUnityPackage群が一括で生成されます。
目的のuntiypackageをダブルクリックするだけで簡単にエディター拡張をインポートできます。
UnityPackageExporterの使い方
"Export/UnityPackage" を選ぶとあとは全自動でUnityPackageが生成されます。