今回は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が生成されます。