自分で作ったライブラリを unitypackage にするとき、毎回手動 :hand: で Asset を選択していくのは面倒なので、 スクリプト :computer: でできる方法を調べた。

概要

基本的なこと

スクリプトで unitypackage を書き出す

AssetDatabase.ExportPackage メソッドを使うと、.unitypackage を書き出すことができる。

AssetDatabase.ExportPackage(assetPathNames, fileName, ExportPackageOptions.Recurse);

API ドキュメントに書いてなかったポイントがいくつかある。

  • assetPathNames は Application.dataPath からの相対パスにする
  • fileName も Application.dataPath からの相対パスにする
  • fileName は拡張子 .unitypackage まで含む

unitypackage を書き出すスクリプトを作った

dddnuts/UnityPacker: Export Unity package を作った。

unitypackage に含めたいファイルやディレクトリをリストした pack ファイルを用意しておくと、 キーボードショートカットで unitypackage を書き出せる。ついでにソースも直接書き出せるようにした。

ショートカット できること
Cmd + E unitypackage を書き出す
Cmd + Shift + E ソースを書き出す

MyApp.pack

Assets/MyApp/Scripts/Foo.cs
Assets/Plugins/iOS/MyApp

のような pack ファイルを用意してプロジェクトのどこかに入れておけば、以下のようなディレクトリ構成で書き出す。

Packages
└── MyApp
    ├── Source
    │   ├── Plugins
    │   │   └── iOS
    │   │       └── MyApp
    │   │           ├── MyAppPlugin.h
    │   │           └── MyAppPlugin.mm
    │   └── MyApp
    │       └── Scripts
    │           └── Foo.cs
    └── MyApp.unitypackage

まとめ・感想

  • AssetDatabase.ExportPackage で unitypackage を書き出した
  • 書き出しを簡単にする dddnuts/UnityPacker: Export Unity package を作った
  • UnityPacker を使ってパッケージやソースを書きだした

スクリプトでできるようになったので、CLI から batchMode で実行すれば自動化できる。

ファイルの拡張子を .pack にしたら Git の内部ファイルと被ったので変えたほうが良いかも?

参考