はじめに
UnityPackageを出力するEditor拡張を作成しました
https://github.com/gatosyocora/gsPackageExporter
公式リファレンス以外にUnityPackageを操作するスクリプトを紹介した記事があまりなかったので,
製作途中で詰まったところなどをまとめました
開発環境
Unity 2017.4.15f1
Visual Studio 2017
Windows 10 Home
UnityPackageを出力するAPIが公式で提供されている
public static void ExportPackage (string assetPathName, string fileName);
public static void ExportPackage (string assetPathName, string fileName, ExportPackageOptions flags);
public static void ExportPackage (string[] assetPathNames, string fileName, ExportPackageOptions flags= ExportPackageOptions.Default);
-
string assetPathName:出力するアセットのパス(複数可, Assetsフォルダからの相対パス)
e.g. Assets/Hoge/piyo.mat, Assets/Foo -
string fileName:出力するUnityPackageのファイル名(ドライブからの絶対パス)
e.g. C:/Users/ユーザー名/Desktop/sample.unitypackage - ExportPackageOptions flags:その他オプション設定
Exportするときのassetの扱い等を第三引数で設定できる
ExportPackageOptions
OR演算子( | )を使うことで複数のオプションを同時に設定できる
画像は出力したUnityPackageを他のプロジェクトにインポートしようとしたときに表示されるものの例
Default
assetPathNameで指定されたassetのみを出力する
assetPathNameがフォルダだけの場合, 空フォルダがExportできないため何も含まないUnityPackageが出力される
Interactive
非同期的に実行する
書き出し中のプログレスバーが表示されて, 書き出しが完了すると出力されたファイルが表示される
Recurse
assetPathNameがフォルダのパスの場合, それ以下に含まれるすべてのアセットを出力する
IncludeDependencies
assetPathNameのアセットで使われているアセットも出力する
fbxを出力しようとした場合, 使われているMaterialやそのシェーダー, テクスチャなども出力される
prefabを出力しようとした場合, 使われている3Dモデルのfbxやスクリプト, アニメーションファイルなどの出力される
IncludeLibraryAssets
assetPathNameで指定されたアセットとLibraryフォルダ以下のアセットが出力される
また, UnityEditorに本来から含まれるdllファイルやプロジェクトの設定ファイルも含まれる
注意点
- 空フォルダは出力されない
- 出力するアセットが多いと書き出し終了までそこそこかかる(処理状況を見るためにInteractive推奨)
- fileNameに存在するファイル名を指定すると上書きされてしまう(これで既存のフォルダを指定してしまいフォルダが消滅しました...)
まとめ
個人的にはInteractiveとRecurseと場合によってIncludeDependenciesを使ってIncludeLibraryAssetsは非推奨です
でもしっかり作りこみたい場合は出力したいアセットのパスをすべて取得してInteractiveを使うのが良さそうです
(自作したExporterでは書き出し前に出力するアセット一覧を表示したかったのですべてパスを取得してInteractiveを使ってます)