テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

AssetStoreのアセットをオープンソースに含めたい

便利なアセットを作っても、モデルやAssetStoreの機能を使用しているが故に
公開しにくいといった場合があるようです。

単純に有料で販売している物(NGUI等)をGithubで上げるのは普通に考えて違法コピーですし、
無料で上げているものも著作権を放棄していないので、これも二次配布・無断転載になります。
(アセットによっては初回無料ですが、後々有料にするケースもあります)


ではAssetStoreのアセットは絶対にオープンソース系に組み込めないのかといえば、
そうではないように思います。

Unityのアセットは全てGUIDが割り振られ、これによって参照するアセットを
決定しています。このGUIDはプロジェクトに登録された際に設定され、
プロジェクトビューで更新している限り変更されません。

AssetStoreで購入したアセットのファイルパスやファイル名を変更したとしても、
更新時に特定のアセットを更新されるのは、こういった理由です。
また、この仕組があるため、UnityはGitやSVNのようなバージョン管理システムでも
プロジェクトを壊さず運用することが出来る訳です。

スクリーンショット 2014-02-01 15.57.57

つまり、

オープンソース系プロジェクトでAssetStoreのアセットを使用したい場合、
AssetStoreのファイルを共有しないようにするだけで問題は無さそうです。

AssetStoreのアセットは利用者が独自にダウンロード、GUIDは一致しているので
オープンソースで提供している物と同一扱いとなり、参照も維持される為です。

オープンソース公開時は、間違ってAssetStoreのアセットを含めないように
 注意する必要があります)

スクリーンショット 2014-02-01 15.40.22

AssetStoreのアセットを無断転載したり、無理に自分で該当するアセットを作って
公開するよりは、かなり容易なアプローチなんじゃないかと思います。


なおAssetStoreのGUIDはパブリッシャーが変更しない限り、ほぼ同じものが設定されています。逆を言えば、これがプロジェクトビュー以外でファイル名やファイルパスを変更した場合GUIDが新しく発行されてしまい、別アセットとして認識されるようになります。

これがアセットやスクリプトの参照が切れる理由です。
プロジェクトビュー外のアセット変更駄目ゼッタイ

スクリーンショット 2014-02-01 15.11.12

GUID情報はメタファイルに含まれてます。


この手順をUnityエディタ側で自動化しようかと思いましたが、一点問題が有り断念しました。
というのも、UnityのAssetStoreはAssetStore.Open()で開くことが出来るのですが、これを開くためには事前にコンパイルが成功している必要があります。つまり、ビルド時にAssetStoreのアセットを要求するタイプのアセットには使えないという事です。

このため、例えばソースコードレベルで結合するタイプの場合、これを通すためには以下の手順が必要になります。
1. パッケージをインポートする機能だけを導入
2. 上で指定されたパッケージを漏らさずインポート
3. オープンソースプロジェクトを導入

正直これならば、ReadMeに導入ファイル一覧を書いた方が楽ですし早いので、
それの方が良さそうな気がします。

自動化する仕組みを作りました。tsubakit1.hateblo.jp