VScodeとUnityを連携する


# はじめに
unityの環境は刻々と変わるので、この通りに進めてもうまく行かないかもしれません。
知識０で書いたため、言葉の定義がガバガバなのと、憶測で書いたところが入り混じっているので、間違っているところだらけだと思います。
分かりにくいところがあったり、間違っているところがあれば、是非コメントをください。

# 環境

|ツール     | バージョン       | 
|:-----------:|:-----------:|
| Windows  10 Education     | 20H2 | 
| unity      | 2020.3.7.1f     | 
| VScode      |  1.56.2        | 


# 前提条件
1. VScodeはインストール済み
1. Unityはインストール済み

# やること
Unityスクリプトを書くにあたってVisual Studioの代わりにVScodeを使う。
コードを自動補完してくれるテキストエディタとして使いたい。
今回はVScodeをデバッグツールやコンパイラとしては使わない。

# 手順
1. UnityからVScodeを指定
1. .csprojectファイルと.slnファイルを再生成
1. .NET SDKをインストール
1. C#拡張アドオンの追加
1. .Net frame work 4.7.1のインスコ


## unity側 から VScodeを指定する
デフォルトではVisualStudioになっているんじゃないかな。
開くエディタを変えます。
`Edit(編集) => Preference(環境設定) => external tools(外部ツール)`
を開きましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246788/db18f1ab-91e9-06f6-21b6-e7bf8d8a7faf.png)

ここで、「外部のスクリプトエディタ」なるところで、VScodeの実行ファイルがあるパスを指定します。
VScodeがもし見つかっていなかったら、実行ファイルのパスを自分で指定する必要があります。
この時点で、Unityのエディタ上でスクリプトをダブルクリックするとVScodeが開くはずです。

## .csprojectファイルと.slnファイルを再生成

恐らく、エディタをVScodeに変更した時に自動的にプロジェクトファイルは再生成されているはずですが...念のため。
Show In Explorer（エクスプローラーで表示）でファイルを開く。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246788/2606d5bd-1dd4-ade6-f2c2-2f5689ec3470.png)


こいつらを一回消す。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246788/f0e4af61-fb93-deab-30b7-7fc435f93870.png)

さっきと同じ画面で、「Regenerate project files」ボタンを押しましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246788/3a00e37c-38e6-8bf3-b532-1ee50adf322c.png)

これをすることで、unityがVScodeを使えるように最適化されます。

#### ちなみに、.csprojファイルについて
https://docs.microsoft.com/ja-jp/dotnet/core/introduction

> .NET アプリは、MSBuild を使用してソース コードからビルドされます。 プロジェクト ファイル ( .csproj、 .fsproj、または .vbproj) により、ターゲットと、コードのコンパイル、パッキング、公開を行う関連 タスクが指定されます。

ここでいう、MSbuildとはアプリケーションをビルドするためのものですね
https://docs.microsoft.com/ja-jp/visualstudio/msbuild/msbuild?view=vs-2019



## .NET SDKをインストール
この時点でUnity側から適当な.csファイルをクリックしてVScodeを開くと、おそらく.NET SDKをインストールしろと催促してきます。
それに従って、Installのボタンを押して、ページに飛びましょう。

出なかった場合は、以下がダウンロードサイトとなります
https://dotnet.microsoft.com/download/visual-studio-sdks

また、.NET SDKについては以下が参考になります。

https://www.atmarkit.co.jp/fdotnet/special/dotnet_sdk/dotnetsdk02.html

.NET SDKとは、

> .NET環境で動作するアプリケーションを開発するためのソフトウェア開発キット」

とありますね。
デバッグツールだけではなくて、クラスライブラリとかも含まれているようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246788/93dc7e64-ad26-a24b-965b-a50bafbe6126.png)

自分のマシンに対応したSDKを入れてください。私の場合はPCが64bitマシンなので、x64 SDKを入れています。

## アドオンのインストール

スニペットを自動的に登録してくれたり、文法の違い（セミコロンがないよ、とか）を指摘してくれる、C#アドオンをインストールします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246788/d303fe04-081c-ab9a-6b8d-e85144f7610d.png)

基本的にはこれを入れるだけで問題はないはず。その他のアドオンはお好みで。



## .Net frame work 4.7.1のインスコ

さて、この時点でVScodeのターミナルウィンドウの出力において以下のように言われるかもしれません

```
.NETFramework,Version=v4.7.1 の参照アセンブリが見つかりませんでした。
この問題を解決するには、このフレームワーク バージョンの Developer Pack (SDK/Targeting Pack) をインストールするか、アプリケーションのターゲットを再設定してください。
```



ここで、参照アセンブリとは、

> アセンブリのメタデータ（どういうクラスがあって、どういうメソッドを持っているか）を参照するためだけのアセンブリ

らしいです。
（これが.NET SDKに含まれてるアセンブリの場所を参照しているのでしょうか。よくわかってないです。）

https://ufcpp.net/study/csharp/FwReferenceAssemblies.html?p=1

さて、コンソールウィンドウで指示された文言の通りに、.Net frame work 4.7.1の.Net Developer Kit をいれましょう。

以下がダウンロードサイトになります。
https://dotnet.microsoft.com/download/dotnet-framework/net471

赤線で示しているとおり、今回はランタイムフレームワークが欲しいわけではないので.Net Developer Kitをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246788/51d831f7-1601-5cf3-c93f-e80fb64f3071.png)

この子が機能して、コード補完を働かせてくれるようになります。
また、しばらく更新まで時間がかかります。

ちょっと待てば、無事補完が効くようになります🎉


# ここまででできない場合

参考サイト
http://tsubakit1.hateblo.jp/entry/2018/06/17/030129

.Net frame work 4.7.1の.Net Developer Kitを入れたとしても、いつまで経ってもVScodeでコード補完が効かないことがあるかもしれません。
既にVisualStudioをインストールしている場合は、VScode用に環境を構築しても、依存関係が解消されず何かしら悪さをされるのかもしれないです。その場合は、VisualStudio側で.Net Developer Kitと同様な機能を持つものをインストールすることで、自分は問題が解消しました。

まず、Visual studio Installer を開きます。
インストール済みのVisualStudioを選択し、`変更`のボタンをクリック。

そして、`個別のコンポーネント`に含まれている、以下のコンポーネントをインストールしてください。

> .Net Frame Work 4.7.1 SDK
 .Net Frame Work 4.7.1 Target Pack

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246788/2b97db35-784f-7cef-91fd-adf0dd06cbcd.png)


つまり、VScodeではなく、visual studioを使って開発するときは、これらのコンポーネントをインストールする必要があるようです。