LoginSignup
6
7

More than 5 years have passed since last update.

unitypackageのインポート処理をカスタマイズする / unitypackageを解凍する

Posted at

Unity には unitypackage という便利な機能があるが、下記の点において不満がある。

  • 任意のパスへインポートできない
  • 該当プロジェクトをエディタで開いていると、コマンドラインでインポートできない

そこで、unitypackage のインポート処理を独自で行うことで、これらの不満を解消してみる。
(以下の方法は Unity のバージョンアップにより利用できなくなる可能性がある。)

コマンドラインでインポート

unitypackage は下記のようにコマンドラインでもインポート可能だが、複数の Unity プロセスが同一のプロジェクトへアクセス出来ないため、既に該当プロジェクトを Unity エディタで開いている場合エラーとなる。

/Application/Unity/Unity.app/Contents/MacOS/Unity \
    -projectPath /path/to/unity/project \
    -importPackage customassets.unitypackage \
    -batchmode \
    -nographics \
    -logfile unitypackage.log \
    -quit

unitypackage を解凍する

unitypackage は tar.gz 形式なので下記のように解凍できる。

mkdir -p customassets
tar -zxpf customassets.unitypackage -C customassets

unitypackage の構造を知る

解答した unitypackage は下記の様に、guid をディレクトリとして、アセット・メタファイル・パス名 が格納されている。

% tree customassets/
customassets/
├── 1b3a955b14cc44f0a85525b74c5cc194
│   ├── asset
│   ├── asset.meta
│   └── pathname
├── 4df8e2426febb471384bf16a4b17d070
│   ├── asset
│   ├── asset.meta
│   └── pathname
└── fe642c8c33bb64f4c88acc0a9c594584
    ├── asset
    ├── asset.meta
    └── pathname

個々のアセットを pathname を元にコピーする

unitypackage の構造がわかったので、pathname に格納されているパス名を元に asset, asset.meta をコピーします。
このパス名を修正することでインポート先を変更したり、インポートするアセットをフィルタリングすることが出来る。
また、Unity のコマンドを使わないので、プロジェクトをエディタで開いていても実行できる。

rm -rf Assets/CustomAssets
for guid in `cd customassets && ls`; do
    path=`cat customassets/${guid}/pathname | sed -e 's/^Assets\/Plugins\//Assets\/CustomAssets\/Plugins\//`
    mkdir -p `dirname $path`
    cp customassets/${guid}/asset $path
    cp customassets/${guid}/asset.meta ${path}.meta
done
6
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
7