今回はPackageManagerがダウンロード(キャッシュ)する先のフォルダの確認と、PackageManagerが提供する機能を改造する方法について紹介します。
PacakgeManagerは機能をUnityエディターに追加する
Unity 2018.1からPackageManagerという機能が導入され、プロジェクトの中身を汚さず追加機能が導入出来るようになりました。
最近のUnityは新機能の大半をこの機能経由で導入しており、(幾つかの内部エンジンが関係しているような機能以外は)Unityエディターのアップデート無しにバグフィックスや新機能の追加、古いバージョンの導入等が可能になっています。
(Unity 2018.2からはエンジン機能の明示的なストリップにも対応)
これはUnityエディターにプラグインのように追加しているのではなく、特定のフォルダパスに事前にパッケージをダウンロードしておき、プロジェクト毎にパッケージを参照する事で実現しています。
つまり、何処かにファイルがダウンロードされている訳です。
PacakgeManagerでダウンロードしたファイルを保存するパス
肝心のPackageManagerでダウンロードしたファイルを保存するパスですが、
WindowsはC:\Users\ANY_LOGIN_ID\AppData\Local\Unity\cache\packages\packages.unity.com\*
、Macは~/Library/Unity/cache/packages/packages.unity.com/*
にあります。
面倒ならば、Unity 2018.2からならばPacakgeManagerからShow In Explorer等で探してやると良いです。
なお、Windowsの場合Cドライブに作られパスの変更は出来ません。*1
また過去にDLしたパッケージを全て保持しているらしく、Cドライブを容量小さめのSSDにしている自分みたいなタイプでは気づいたら容量がなくなってたりします。
自分の環境ではパッケージの保持に800MB程使用していました。
ついでに経験則ですが、もしネットワークが不調(例えば貧弱なネットワーク環境で大人数のワークショップをする等)だったりPackageManager側のサーバーが不安定だったりで中途半端にパッケージがダウンロードされた場合、上記フォルダからダウンロードしたファイルを消すと治る事があります。
(既にダウンロード判定された場合、キャッシュが使用される為、消さないと治らない事がある)
PackageManagerが提供する機能を改造する
PackageManagerのスクリプトをPackages以下に配置してやれば改造が可能になります。
また改造しない場合でもAssembly Definition File単位でソリューションが分割されるので、クラスへのジャンプが容易になります。
ソースコードを追う上でも便利かもしれません。
PackageManagerからダウンロードするスクリプトは基本的にReadOnlyです。ここで提供されているパッケージは全てのエディターからアクセスされているため、編集すると全てのプロジェクトが影響してしまい大惨事になります。
ただ、実際このPackageManagerで提供されている機能の大半は完全にC#で動作しておりUnityのフォルダルールに従って配置されているので、実は普通にプロジェクトの中にコピーしてしまえば編集可能になったりします。
PackageManagerで公開されているアセットの中身をプロジェクトにコピーして編集しやすくする的な #unity pic.twitter.com/Q72s7iqaLS
— 椿 (@tsubaki_t1) August 15, 2018
かなりハック的なアプローチですが、本当に必要な場合は検討しても良いのかもしれません。
まぁ幾つかのプロジェクトで確実に必要そうな感じなので(例えば改造前提のLWRPなど)、その内ちゃんとしたアプローチが用意されそうな気がします。専用フォルダに改造可能なパッケージをコピーするとか
AssetStoreのパッケージもPackageManager経由で云々という話もUniteでされていたので、今PackageManagerに色々と労力を割くと後で泣きそうな予感も
関連
*1:AssetStoreでダウンロードしたパッケージをDドライブに保存するようにする 的なアプローチで変更は出来るかもしれませんが、機能としては用意されていません。