🔧
Unity Package Managerのソースコードにパッチを当てる
Unity Packageのソースコードにバグがあり直したい場合、普通はUPMでの管理を諦めてAssets内にコピーして修正します。
私の場合はARFoundationをUnity Editorでリモートデバッグするライブラリを作っていましたが、ARFoundationはUnity Editorでのテストを全くされていないので、Editorでのみ発生する問題がありました。ARFoundationはバージョンアップが早く、他のバージョンのUPMを頻繁に差し替えることが合ったので、ソースをコピーするのではなく、パッチを当てていました。
Unity 2020.2頃まではパッチをPROJECT_ROOT/Library/PackageCache/THE_PACKAGE_ID
以下に当てればよかったものの。
Unity 2020.3 LTSから、プロジェクトのPackageCacheを変更しても、即座に元のファイルにRevertされるようになってしまいました。そこでUniyt Package ManagerのGlobal Cacheへも同時にパッチを当てることに。
Global Cacheの場所
最終的に以下のようなソースになりました。
難点は、Global Cacheを変更するので、使ってる全プロジェクトへ適用されてしまいます。
グローバルのキャッシュを消せば元に戻せます。
Discussion
upmのパッケージはmanifest.jsonがあるPackagesフォルダに直接配置できるのでPackageCacheからコピーしてパッチを当てると影響範囲をそのプロジェクトに限定できます。
私も通常のプロジェクトだとそうやっています。
上記の場合はOpen Source Projectでユーザー毎に別バージョンのAR Foundationを使ったりしているので、パッチを当てる必要がありました。