なんでそんなことするの?
クラウドサービス「Box」のAPIをUnityで利用する必要がありましたが、このAPIにはBox
という名前空間が含まれています。一方で、UnityのVisual Effect Graph
パッケージ内のVFXUIDebug.cs
にはUnityEngine.UIElements.Box
が使用されており、この二つが名前空間の競合を引き起こしてしまいました。
そこで、競合を解消するためにVFXGraph
パッケージのコードを編集する必要がありました。しかし、Library
フォルダ内のパッケージはGitで共有されず、またUnityのアップデートで上書きされる可能性もあります。そこで、VFXGraph
パッケージをローカル化し、競合を解消する方法を取ることにしました。
正直パッケージ側で競合しないようになんとかしてほしい( ;∀;)
Unityパッケージのローカル化手順
1. Library/PackageCache から Packages フォルダにコピー
まず、競合が発生している Visual Effect Graph
パッケージを Library/PackageCache
フォルダから Packages
フォルダにコピーします。これにより、UnityはPackages
フォルダ内のパッケージを優先して参照するようになります。
2. 競合の解消とコードのカスタマイズ
次に、コピーしたパッケージのコード内で競合を解消するための編集を行います。具体的には、VFXUIDebug.cs
内でUnityEngine.UIElements.Box
を明示的に指定して競合を回避します。編集が完了したら、Unityを再コンパイルすることで修正が適用されます。
ローカルパッケージのメリットと注意点
メリット
-
直接編集が可能
パッケージ内のコードをプロジェクトに合わせて直接編集できるため、細かな調整や競合の解消が可能です -
アップデートで上書きされない
パッケージがローカルにあるため、Unityのアップデートで勝手に上書きされる心配がなくなります
注意点
-
更新管理の手間
ローカルパッケージは手動で更新する必要があるため、Unity公式の最新バージョンがリリースされた際には、手動で再度パッケージを取得・編集する必要があります
まとめ
Unity標準パッケージをローカル化することで、プロジェクトに合わせた競合解消や独自のカスタマイズが可能になります。この方法は、特に外部ライブラリとUnityの名前空間が競合する場合や、パッケージの一部を調整したい場合に有効です。