【 Unity 】Unity × VSCodeで爆速コーディング

# UnityとVSCodeを使ったコーディングがやりたかった。。

***この記事は、Windowsユーザー向けのものです！！***

業務でVisual Studioを使っていると、ちょっとした時に「えっ？！」となる瞬間があります。
もともとVSCodeでwebエンジニアをやっているのでVSCodeのお作法と違うスタイルになるとちょっと戸惑います。
コメントアウトの仕方であったり、文字検索するときのショートカットを間違えるたびに「イラッ💢💢💢」ときてしまう。。(私は「Ctrl + d」の文字検索をよく使うのでその度にVisual Studioで変な画面が開く。。。)

最初は我慢してVisual Studioのお作法に慣れようと我慢をしていたのですが、もう無理です。
なんとか整えます。

今回は、試しにいろいろやっていたらできたという副産物なので、バージョンなどが違ったりすると全く動かないかもしれません。ご了承くださいませ。

また、「この方法じゃなくてももっとスマートにできたよ！」等の情報をいただけると幸いです。。

## 1.動作環境

```
■　Windows 10

■　Unity 対応バージョン
　●　2019.2.8f1 Personal
　●　2019.4.4f1 Personal  // 追記 2020/8/5

■　Visual Studio 対応バージョン
　●　2019 Community 16.6.2 ~ 16.8.3

■　Visual Studio Code 対応バージョン
　●　1.45.1 ~ 1.52.1
```

## 2.Unityの設定

最初にVSCodeとUnityをつなげるためにモジュールを入れていきたと思います。
絶対必須かと言われると自信がありませんが、自分は入れることで動ける環境になりましたので、入れてみて動かなかったら消していただいて構わないと思います。

### 2-1 ~~VSCode (Asset Store)~~　いらない

※追記 2020/8/5
こちらのAssetなしでの動作を確認していますのでこちらの設定作業は行わないでいいようです！

Asset Storeから以下のAssetをインポートする。
![6.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363822/43c5471c-8f8b-4450-0d59-d377685cbfb4.jpeg)

Unityの環境設定からVSCodeの設定を変更する。
![7.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363822/3c28fbf5-d417-cc16-c7c5-9cd623429585.jpeg)

※ VSCodeのパスをきちんと通してください。私はCドライブ難民ですので、Dドライブに入れています。。(せっかくの高速エディターなのに...)

※ ForceUpdateを行うと、VSCodeアセットのバージョンをアップデートてくれます。
最新バージョンではC#7系統の記法が使われていますので、プロジェクト的に問題がなければアップデートしていただいて問題がないと思われます。

---

### 2-2 Visual Studio Code Editor

Package ManagerからEditorサポートを入手する。
![8.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363822/a227f95d-c59d-ff2c-cc46-a60878966587.jpeg)

※ pacage managerが見つからない方は、window / Pacage Managerを選択するとwindowが出てきます。

---

### 2-3 環境設定の変更

~~assetのVScodeで対応しているとは思うのですが、一応やってください。自分の環境ではこうなんです。。。~~
External ToolのEditorの設定もVSCodeに変更を行ってください。
VSCodeなんてないよという方はこの方の記事をご参考ください。

https://qiita.com/kuronekoieko0305/items/bb2624a77c0e19d50b47

![9.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363822/c8735e5a-ca6d-758b-7fce-92e824154e80.jpeg)

---
**<font color="red">2020/09/01 10:00:00 追記</font>**
~~Genetate .csproj files for:の項目においてすべての項目をチェックをつけて再度ファイルの生成を行ってください。~~
~~そうすることでUnityを起動していない状態でもEditor補完が効いていることを確認しています。~~

**<font color="red">2020/09/17 09:00:00 追記</font>**
~~新規にファイルを作成などを行った場合は、csprojの更新を行わないといけないようです。~~
~~ここだけはUnityを起動して「Regenerate Project files」を行わないと関数などの参照は行われないです。~~

**<font color="red">2020/12/2 11:00 追記</font>**
~~全チェックマークをOffにしてもUnityを起動している間だと正常に動作しています。~~
~~OmniSharpも追加していない状態でも正常に動作しているようなので、Omniなくても動く？かもしれません。~~

**<font color="red">2021/01/04 17:00 追記</font>**
VSCode側のC# Extension側の問題だったのか、`C# Extension Version 1.23.7 ~ 以降`だと問題なく補完機能が動作しているようです。チェックはすべて外していただいて大丈夫です。

---

## 3 Mono Develop

Monoをローカルに入れることで、VSCodeのC#エクステンションがまともに動き始めました。

### 3-1 Monoのインストール

下記のリンクからMonoをインストールしてください。
https://www.monodevelop.com/download/#fndtn-download-win

<img width="1037" alt="スクリーンショット 2020-06-10 19.49.32.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363822/2a9318c4-40fa-548c-a4bd-a924a96f8424.png">

インストール完了後にパスを通すところまで行ってください。

- コマンドプロンプト

```
set PATH=%PATH%;C:\Program Files\Mono\bin\
```

コマンドプロンプトで以下の様な画面になればOKです。
![10.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363822/0fb04505-7550-c2f5-4107-c8c4c6a060f8.jpeg)

---

### 3-2 GTK# for .NET

上記のダウンロードサイトよりGTK# for .NETもインストールを行い、セットアップをお願いいたします。
自分は特に設定の変更はしていません。

---

## 4 Visual Studio

Visual Studio 2019で.NETをインストールしてください。
私はHoloLensを開発するので、.NETのバージョンは4.6系を入れておけば問題がありません。

※ご自身のUnity環境に合わせたTargeting Packを入れてください。
![11.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363822/610acab7-458c-a175-1f58-f7ba92633303.jpeg)

## 5 Visual Studio Code

入れるエクステンション

- C#系
![12.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363822/d691eb57-a141-5de1-6448-314a44e8204b.jpeg)  

- Unity
![13.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363822/2fcd2b3e-7aaa-386b-007d-f3e323cace41.jpeg)

※バージョンが古いと下記のmonoのパスの設定作業が必要になります。1.23.7以上のC# Extensionのバージョンであればパスの設定作業はいらないようです。

C#エクステンションのmonoのパスの変更などを行います。

設定ファイルを開きます。

![16.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363822/22de95e7-b6f9-3089-735c-5952798c141c.jpeg)
![15.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363822/9a009526-6b41-4748-16a3-6781d43871f5.jpeg)

C# configurationの項目からMonoのパスを指定する。setting.jsonを開いて以下の行を追加してください。

```setting.json
{
    "omnisharp.monoPath": "C:\\Program Files\\Mono\\bin\\",
    "omnisharp.path": "1.32.3-beta.9",
    "omnisharp.defaultLaunchSolution": "null",
    "csharp.suppressHiddenDiagnostics": false,
    "csharp.testsCodeLens.enabled": false,
    "omnisharp.useEditorFormattingSettings": false,
    "csharp.suppressDotnetInstallWarning": true,
    "omnisharp.enableEditorConfigSupport": true,
    "csharp.semanticHighlighting.enabled": true,
}
```

上記でOmniSharpのエラーが解消されないかたは、こちらの方の記事が参考になると思われます。
https://h.s64.jp/entry/omnisharp_msbuild_2017_conflict

重要：以上の設定を行い、端末を再起動してください。

unityを立ち上げて、C#プロジェクトを右クリック→Open C# Project In Codeで開いてください。
![14.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363822/a94b3dbd-bc3c-4e79-c59b-6464547bc6f9.jpeg)

以下のように、VSCodeでコード補完が適用されていたら成功です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363822/08f3f948-0aaa-78f6-05a0-ea0ad273cd45.png)

**<font color="red">2020/12/2 追記</font>**
現在、VScodeのC#エクステンションver1.23.6にてomnisharpの設定なしでのコード補完を確認しています。
Omniの設定は行わなくても、行けるようになったようです！！やったね！！


## 最後に

かなり右往左往してなんとかたどり着いたものなのでどれが正解なのかというところの検証までは行っていませんが実際に、私の環境では動いていますので、現状頑張れば動かせるということは証明されたはずです。

かなりいろいろな方の記事を参考にさせていただき、悩まれている方が一定数以上いることも確認していますので、そういった方や今後VSCodeでの開発を考えられている方の参考になれば幸いです。

あと、やってて意外と再起動したりとかでなおったりするレベルの問題なのかもしれないので、つまったら一旦再起動してみて検証するのも大事だと思いました。

以上です！

## 更新履歴
- 2020/09/01 10:00:00   2-3の項目を修正

csprjファイル内のUnityEngineなどのファイルパスがうまく反映されず、Editor補完がうまく効かなくなるケースがあったため、Unityを起動しないでもCodeのみでunityEngineの補完も行えるように設定を変更

- 2020/09/01 10:00:00   2-3の項目を修正

csprojの更新関連で、新規ファイルを作成した際の流れについて追記を行いました。