土屋つかさの技術ブログは今か無しか

土屋つかさが主にプログラミングについて語るブログです。

#unity 公式のPackageをカスタム化する手順の解説

 この記事はUnityアドベントカレンダー2021part3の3日目の記事です。記事を書いたのもアップしたのも12月26日ですが、アドカレpart3がスカスカなのが寂しいので強引に入れさせてもらいました。
qiita.com
 ちなみに、part1の3日目も土屋が書いてますのでこちらもどうぞよろしくです。
someiyoshino.info
 URPの実装を見ている時、挙動を確認するためにURPのコードを弄りたくなることがよくあると思いますが*1、それをする為に必要な操作があります。
 これ、以前どこかで画像付きの分かりやすい記事を見た記憶があるんですが、どうにも再検索できなかったのでメモとして上げておきます*2

Package ManagerでURP関連パッケージを確認する

 Unityの基幹ライブラリの一部はPackageという独立した形式で配布されていて、必要に応じて個別に更新することが出来ます。プロジェクトが使用しているPackageはPackage Managerで確認できます。URPテンプレートプロジェクトだと下図のような感じ。「Universal RP」がURP実装のPackageになります。
f:id:t_tutiya:20211226175816p:plain
 ちなみに、SRP自体のコア実装である「Core RP Library」というPackageも別にあります。"Packages: Unity Registry"に切り替えるとこちらも確認できます。
f:id:t_tutiya:20211226175820p:plain
 今回はUniversal RPパッケージだけを編集します。

パッケージが配置されるフォルダを確認する

 Packageの実体は、プロジェクトの"\Library\PackageCache"フォルダに格納されています。
f:id:t_tutiya:20211226175823p:plain
 Universal RPの実装は"\Library\PackageCache\com.unity.render-pipelines.universal"フォルダに格納されます。フォルダ末尾の"@10.7.0"はPackageのバージョンを表していますが、内部的には参照されていないようです(良く知らない)。
 ただし、パッケージの配置フォルダを確認する時は、フォルダを直接掘るのではなく、以下の様にProjectビューのPackagesツリー配下にある各パッケージを右クリック→"Show in Explorer"を選択してエクスプローラーを開く事が推奨されています(理由は後述します)。
f:id:t_tutiya:20211226175806p:plain

PackageCacheフォルダからPackagesフォルダにコピーする

 さて、このフォルダ配下のコードを書き換えればいいかと思いきや、これは上手く行きません。どうもunityが不定期にPackageCache配下のデータを確認しているようで、コードを書き換えてもどこかのタイミングでrevertされてしまいます*3
 これを回避するためには、"com.unity.render-pipelines.universal"フォルダをプロジェクト直下の"Packages"フォルダ下にコピーします。コピー後のフォルダ名からは末尾のバージョン表記を削除することが推奨されています*4
f:id:t_tutiya:20211226175810p:plain
 この状態でunityをアクティブにすると、Package Manager上でUniversal RPに"Custom"と付記されます。同時に、PackageCacheフォルダ配下からはUniversal RPフォルダは削除されます。
f:id:t_tutiya:20211226175813p:plain

完了!

 これで準備は完了です。Packagesフォルダにコピーした実装を更新すれば正しく反映されます。なお、この状態でProjectビュー上で"Universal RP"を右クリックして"Show in Explorer"を選択すると、自動的にPackagesフォルダにリダイレクトされます。Packageは状況によって配置場所や配置方法が異なるため、unityにリダイレクトを任せるこの方法が推奨されています。

宣伝「Unityシェーダープログラミングの教科書シリーズ」

 土屋は同人誌「Unityシェーダープログラミングの教科書」シリーズを書いています。現在以下の4冊が出ています。

  • Unityシェーダープログラミングの教科書 ShaderLab言語解説編
  • Unityシェーダープログラミングの教科書2【反射モデル&テクスチャマップ編】
  • Unityシェーダープログラミングの教科書3 ライティング&GI(大域照明)解説編
  • Unityシェーダープログラミングの教科書4 SRP[1]UniversalRP/Litシェーダー解説編

 これらの同人誌は、現在BOOTHにてPDF版を有料頒布しています。
染井吉野ゲームズ
s-games.booth.pm
 技術書典などの同人誌即売会で紙書籍版も頒布しています。ただし、昨今の情勢を鑑みて、次の紙版の頒布がいつになるかは未定です。すみません。
 なお、年明けの技術書典で第5巻の頒布を予定しています(間に合えば)。5巻はURPポストプロセス処理編になる予定です(間に合えば)。今回の記事は5巻に収録される予定です(間に合えば)。お楽しみに。

参考リンク

 今回の記事は、このページの「Unity のパッケージをキャッシュからコピーする」という項をベースにしています。
docs.unity3d.com

*1:あるんだよ

*2:誰か元記事を知ってたら教えて欲しい。"Custom"の表示をスクショしてる記事を見た筈なんだ

*3:グローバルパッケージキャッシュからデータを復旧させているようです。実際にどのようなタイミングで更新されるのかは良く分かりませんでした

*4:ただし、こちらでも内部的な参照はされていないようです