VS Code で Unity の補完が効かない時に見る所
プロジェクトが読み込まれず IntelliSense が死んでいる時、原因の大半は .NET SDK かパスです。確認する順番を書いておきます。
Unity のスクリプトを VS Code で開いたら補完が一切効かない、using UnityEngine; に赤い波線が出る、という状態になりました。拡張機能の入れ直しを何度かやって時間を溶かしたので、確認する順番を残しておきます。
1. まず .NET SDK が入っているか
一番多い原因がこれでした。C# 拡張はプロジェクトを読み込むのに .NET SDK を使いますが、これがパスから見えていないと何も起きずに黙って失敗します。
dotnet --version
command not found や「用語として認識されません」が返ってきたら、SDK が入っていないかパスが通っていません。.NET SDK を入れて、ターミナルではなく VS Code 自体を再起動します。VS Code は起動時の環境変数を持ち続けるので、ターミナルだけ開き直しても直りません。
確認は VS Code の出力パネルで行えます。表示 → 出力 → ドロップダウンから「C#」を選ぶと、読み込みのログが出ます。SDK が見つかっていない場合はここに理由が書いてあります。
2. .sln が生成されているか
プロジェクトのルートに .sln と .csproj がなければ、拡張機能は読むものがありません。Unity 側で作らせます。
Unity の Edit → Preferences → External Tools を開いて、External Script Editor が Visual Studio Code になっているか確認します。なっていたら、その下の Regenerate project files を押します。
それでも生成されない時は、Assets の外にある .sln .csproj Library/ を一度消してから Unity を再起動すると作り直されます。Library/ は再生成されるので消して問題ありません。
3. プロジェクトのパスを疑う
ここが自分のケースで効いた話です。プロジェクトの置き場所が
C:\Users\...\OneDrive\ドキュメント\My project (1)\
のようになっていました。この中に問題になり得る要素が3つ入っています。
- OneDrive — ファイルがクラウドのみの状態だとツールから実体が見えないことがある
- 日本語 — 一部のツールチェーンが非 ASCII のパスで転ぶ
- スペースと括弧 — コマンドライン引数として渡された時に切れる
補完が効かない以外にも、ビルドが不定期に失敗する、Git が重い、といった症状の原因にもなります。
対策は単純で、プロジェクトを OneDrive の外の、ASCII だけの短いパスに移すことです。
D:\unity\my-project\
移動したら Library/ を消して Unity で開き直し、もう一度 Regenerate project files を実行します。
ちなみに Unity のプロジェクトを OneDrive に置くこと自体、同期対象のファイルが数万件になるので避けた方がいいです。バックアップは Git と
.gitignoreでやる方が結果的に軽くなります。
確認する順番
dotnet --versionが通るか.slnがプロジェクトルートにあるか- パスに OneDrive・日本語・スペースが含まれていないか
- 出力パネルの「C#」に何が出ているか
拡張機能の再インストールは最後で十分です。自分の場合は1番でした。