はじめに
AI全盛になってきて、UnityプロジェクトもVSCodeで扱えた方がAIとの連携がしやすいと思うようになりました。ですが、Packageバリバリのプロジェクトを開いている場合、パッケージ側のコードなどがいい感じにVSCodeで閲覧できない現象に行き当たりました。これを解消した話です。
(2026/2/18追記)ただし、これにより、利用メモリがかなり(GB単位)増える疑いがあります。 これは、dotnetが解析する対象プロジェクトが増え、解析のために確保したメモリがアンロードされないためと推測します。
起こっていた現象
VSCodeで、プロジェクト内のソースコードから、パッケージ側のメソッドの定義を見に行くと、以下のようなパスのファイルが開きました。
/var/folders/何ちゃら/DecompilationMetadataAsSourceFileProvider/何ちゃら/クラス名.cs
このファイルは、コメントなどの入っていない、バイナリから生成したと思われるC#ソースコードになります。このコードから、さらに該当パッケージ内のクラスを辿ったり、定義をみたりすることはできませんでした。これは不便です。
例えばRiderではパッケージキャッシュ配下に実際に存在するファイルを開いてくれるので、パッケージの内容全体を調査することができます。
対策方法
Unityによって生成されるプロジェクトファイル(.csproj)に、該当パッケージの内容が含まれるようにする必要があるようです。
このため、Settings 内の External Tools で、この辺りのチェックを入れるのがポイントです。(Unity 6.0の場合)
以下の例「これをON」は、UPM管理下のパッケージの場合です。Git参照だったりtarballだったりによって、チェックする場所が異なります。
この設定により、パッケージキャッシュ (プロジェクトフォルダ/Library/PackageCache/ )配下のソースコードを開いてくれるようになります。これによって、パッケージ全体のスクリプトや構成などを容易に閲覧することができます。また、さらに定義などを潜って調べたりすることもできます。
なお、通常左側にある Explorer View には開いた該当ファイルだけが表示されます。エディターView上部にあるパスのところから、周辺ファイルを確認することができます。
そのほか基本的なこと
UnityでVSCodeを利用できるようにする方法は、各所に書かれていますが以下のような感じです。
- Package Managerから
Visual Studio Editorパッケージを追加、更新 - Settings内のExternal Toolsで、External Script Editor ドロップダウンで
Visual Studio Code[...]を選択 - VSCodeに
Unity拡張機能を追加- C# Dev Kitも入る
- 該当バージョンの
.Net SDK(今回だとv9.0.x) をインストール - VSCodeの
Reload Windowコマンドまたは再起動で変更を反映
.csprojは何個作られているか?メモリ節約するには?
上記設定でしばらく利用していて、VSCode関連の利用メモリが増加しているように思いました。1プロジェクトあたり数GB〜10GB等利用しているように思われました。
解析対象プロジェクトの全体のコード量に応じて増えている可能性があるため、指針として .csproj の数をみてみました。
| 状況 | .csproj個数 | 増加分 |
|---|---|---|
| チェックなし | 30個 | |
| Embedded Packagesにチェック | 30個 | 増加なし |
| Local Packagesにチェック | 64個 | +34個 |
| Registry Packagesにチェック | 147個 | +83個 |
| Git Packagesにチェック | 167個 | +20個 |
| Built-in Packagesにチェック | 170個 | +3個 |
| Local tarballにチェック | 188個 | +17個 |
| Packages from unknown sourcesにチェック | 188個 | +0個 |
| Player projects はチェックできなかった |
これを見ると、少なくとも Registry Packages にチェックを入れる場合は利用メモリの大幅増加を覚悟したほうが良さそう です。
また、プロジェクトで不要なものについてはチェックを外したほうが良さそうです。
また、一回生成した .csproj ファイルは勝手に消えないため、自分で消したほうが良いかもしれません。
