VSCodeのインテリセンスが機能しなかったときに確認すること

[PONOS Advent Calendar 2021](https://qiita.com/advent-calendar/2021/ponos) 4日目の記事です。
昨日は@e73ryoさんの「[Debug.Log()の全文をファイル出力し、<message truncated>で省略された内容をすぐに確認できるようにする](https://qiita.com/e73ryo/private/808107640ea77ec04a8a)」でした。

#はじめに
VisualStudioCode(以下VSCode)を使い始めて3年になりますが、いまだにインテリセンス（コード補完やコード整形など）が機能しなくなることが少なくありません。
検索すると同様の記事がいくつも見受けられますが、改めて自分なりにまとめていたものを共有させていただきます。どなたかのお役に立てたら幸いです。

#チェックシート

###Unity側
- [x]  PreferencesのExternalToolsに「VisualStudioCode」が指定されているか
- [x]  PackageManagerのVisualStudioCodeEditorのバージョンが適したものになっているか
- [x]  AssetsのOpen C# Projectから開いたことがあるか
- [x]  omnishap.jsonがUnityプロジェクト内に置かれているか

###VSCode側
- [x]  コマンドパレットから「OmniSharp:Select Project」を実行してみたか
- [x]  コマンドパレットから「OmniSharp: Restart OmniSharp」を実行してみたか
- [x]  設定の UseGlobalMono が always になっているか

###その他

- [x]  Monoの最新版がインストールされているか
- [x]  アプリケーションやPC本体を再起動してみたか

#詳細

###Unityエディタ側

- **PreferencesのExternalToolsのExternalScriptEditorに「VisualStudioCode」を指定する**
Unityのバージョンによっては「Code」という選択肢の場合もあります。
![スクリーンショット 2021-12-01 15.17.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538709/fd634adc-0175-4a70-af0f-c4c2fd153db0.png)

- **PackageManagerのVisualStudioCodeEditorのバージョンを最新もしくは適したものにする**
[ 20xx.x verified ]と記されたバージョンが適しています。
![スクリーンショット 2021-12-01 15.19.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538709/3317bedb-0653-d44e-3d58-331e3c1fd0a6.png)

- **Assetsの「Open C# Project」からVSCodeを開く**
後述のVSCode側の設定が一通り終わった後、 VScodeのアプリケーションを終了の上でもう一度「Open C# Project」をしてみてください。
![スクリーンショット 2021-12-01 15.24.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538709/2554cc51-2b09-e889-9a68-109501efd83c.png)

- **omnishap.jsonをUnityプロジェクト内に置く**
omnishap.jsonがAssetsと同じ階層に置かれていることを確認してください。
※omishap.jsonに関しては割愛します。

###VSCode側

- **コマンドパレットから「OmniSharp:Select Project」を実行する**
通常はUnityエディタで「Open C# Project」したときに自動選択されるはずですが、何らかの原因により失敗している場合にお試しください。
![e.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538709/b19f40e0-a96a-fee3-571c-e67269ec731f.png)
正常時はVSCode左下に「{プロジェクト名}.sln」が表示されています。
![スクリーンショット 2021-12-01 15.05.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538709/9ecd9260-787f-ab64-d01d-60dd7fdb613e.png)

- **コマンドパレットから「OmniSharp: Restart OmniSharp」を実行する**
おかしいなと思ったらとりあえずリスタートさせることにしています。
![d.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538709/1774a517-aec3-8b92-d241-676ca98d7405.png)

- **設定のUse Global MonoをAutoからalwaysに変更する**
デフォルトはautoになっていますがalwaysに変更してください。以前はautoで問題なかったと思うのですが、ここ最近alwaysにしないとエラーが解消しないという報告を受けるようになりました。
![f.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538709/3d667988-de7f-3235-b6fa-f06495711494.png)

###その他

- **Monoの最新版をインストールする**

https://www.mono-project.com/download/stable/

- **アプリケーションやPC本体を再起動する**

言うまでもないことですが、今回の件に限らず再起動しないと反映されないことなどが多々あるので。
Macの場合はウィンドウを閉じるだけは終了しません。Dockのアイコンを右クリックしてそれぞれのアプリケーションを終了させてください。

#おまけ


###VSCodeのおすすめ設定

- **自動更新をOFFに**
VScode本体、インポート済みの拡張機能、Unityエディタのそれぞれのバージョンがあわないと噛み合わなくなることがあります。今現在安定動作しているのであれば自動更新をOFFにしておくほうが無難です。
設定の検索窓にupdateと打ち込んでから、いくつかの自動更新をOFFにしておきましょう。

- **コード整形とセーブのタイミング**
この辺は好みですが、自分の場合はVScodeからフォーカスを外した時にコード整形&セーブしています。
UserSettings>Text Editor>FormatOnSaveをONに。（ファイル保存時に自動整形する）
UserSettings>Files>AutoSaveをonFocusChangeに。（VSCからフォーカスが外れた際に自動セーブする）

#動作確認環境
Unity2019.4.29f1 / PackageManager:VisualStudioCodeEditor 1.2.4
VSCode 1.58.0 / 拡張機能 C# 1.23.0 / JapaneseLanguagePack 1.48.1

#最後に

明日は@blockさんです！