[Ubuntu20.04]UnityとVSCodeでデバッグできる環境にする


# 0. 前提条件

- 前提条件
  - Ubuntu20.04
  - Unityをインストール済み
  - VSCodeインストール済み



# 1. 必要な拡張機能をインストール

- [C#](https://marketplace.visualstudio.com/items?itemName=ms-dotnettools.csharp)と[Debugger for Unity](https://marketplace.visualstudio.com/items?itemName=Unity.unity-debug)をインストールする。（先にC#をインストール）
- VSCodeを開き、左側のExtensionをクリックし検索してインストールする。

# 2. .NET Coreをインストール
- .NET Coreとは、LinuxとmacOSに念頭に置いて設計された無料のオープンソースソフトウェアフレームワークです。
- これは、Linux,macOS,Windowsシステムで使用可能な.NETFrameworkのクロスプラットフォームの後継です。

### 2-1. MicrosoftPPAを有効にする
- 次のコマンドを実行し、Microsoftパッケージ署名キーを信頼できるキーのリストに追加し、パッケージリポジトリを追加。

```
wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
rm packages-microsoft-prod.deb
```

### 2-2. SDKのインストール

- .NET SDKを使用すると、.NETを使用してアプリケーションを開発できます。
- .NET SDKをインストールする場合、対応するランタイム環境をインストールする必要はありません。
- .NET SDKをインストールには、次のコマンドを実行します。

```
sudo apt-get update; \
  sudo apt-get install -y apt-transport-https && \
  sudo apt-get update && \
  sudo apt-get install -y dotnet-sdk-6.0
```



### 2-3. ランタイムインスタンスのインストールする

- ASP.NET Coreランタイムを使用すると、ランタイムが提供されていない.NETで構築されたアプリケーションを実行できます。
- .NETと最も互換性のあるASP.NET Coreランタイムをインストールします。
- 次のコマンドを実行します。

```
sudo apt-get update; \
  sudo apt-get install -y apt-transport-https && \
  sudo apt-get update && \
  sudo apt-get install -y aspnetcore-runtime-6.0
```


### 2-4. .NET Coreのバージョンを確認する

- .NET Coreのバージョンを確認するには次のコマンドを実行します。

```
dotnet --version
```

- .NET Core SDK6.0をインストールしたため、以下の出力となります。

```
6.0.102
```


### 2-5. サンプルアプリケーションを作成する

- .NET Coreを使用してサンプルアプリケーションを作成します。
- 次のコマンドで新しいコンソールアプリケーションを作成します。

```
dotnet new console -o HelloWorld
```

- 上記のコマンドで、.NETアプリケーションを作成します。
- 現在のディレクトリ下に「HelloWorld」という名前のディレクトリが作成されます。
- 「HelloWorld」ディレクトリに移動してアプリケーションの作業を開始できます。

```
cd HelloWorld
```

- 次のコマンドを実行して、このアプリケーションを実行します。

```
dotnet run
```

- 以下の出力が表示されます。

```
Hello World!
```




# 3. Monoのインストール

### 3-1.システムにMonoリポジトリを追加する

- パッケージリポジトリは、必要なパッケージをホストします。
- 次のコマンドを実行します。


```
sudo apt install gnupg ca-certificates
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
echo "deb [arch = amd64] https://download.mono-project.com/repo/ubuntu vs-focal main" | sudo tee /etc/apt/sources.list.d/mono-official-vs.list
sudo apt update
```

### 3-2.Monoをインストールする

- コードをコンパイルするには、パッケージ`mono-devel`をインストールする必要があります。


```
sudo apt install mono-devel
```

### 3-3.試しにC#のコンパイルをする

- 試しに以下のソースをコンパイルします。
- ファイル名は`hello.cs`とし、以下のコードを作成します。

```cs
using System;

class Prog
{
    static void Main()
    {
        Console.WriteLine("Hello World!!");
    }
}
```

- コンパイルのコマンドを実行する。成功すると`hello.exe`が出来上がる

```
mcs hello.cs
```


- `hello.exe`を実行すると、`Hello World!`が出力されます。

```
mono hello.exe
```



# 4. VSCodeの設定

- VSCodeを開き、`File - Preferences - Settings - Extension - C# configuration`に移動し、`Omnisharp: Use Global Mono`をautoからalwaysに変更する。
- VSCodeを閉じます。

# 5. Unityの設定
- Unityを開き、`Edit - Preferences - External tools - External Script Editor`で`Visual Studio Code`を選択する。
- 同じウィンドウ`External Tools`で以下の項目をチェックする。チェック後、`Regenerate project files`ボタンをクリック
  - Embedded packages
  - Local packages
  - Built-in packages
  - Git packages


# 6. デバッグができているか確認

- Unityプロジェクトにコードを作成して、MainCameraなどのオブジェクトにアタッチする。
- `Run and Debug`アイコンを選択肢、`create a launch. json file`をクリック。`Unity for Debugger`を選択。
- Unityの右下の虫マークを押し、`Siwth to release mode`をクリックする。
- コードにブレークポイントを貼り、F5を押す。
- UnityでPlayボタンを押すことでデバッグができる。
- もしもデバッグが上手くいかない場合は以下のサイトを参考にすると解決できる。
  - [【Unity】VSCode でデバッグできなくなった場合の対処方法](https://baba-s.hatenablog.com/entry/2021/10/12/090000)


# 参考にしたサイト
- [https://tecadmin.net/how-to-install-net-core-on-ubuntu-20-04/](https://tecadmin.net/how-to-install-net-core-on-ubuntu-20-04/)
- [Instalación del SDK y el entorno de ejecución de .NET en Ubuntu](https://docs.microsoft.com/es-es/dotnet/core/install/linux-ubuntu#2004-)
- [[SOLVED] Unity with VS Code and intellisense on Linux Mint](https://forum.unity.com/threads/solved-unity-with-vs-code-and-intellisense-on-linux-mint.986088/)
- [UbuntuでMonoを導入してC#のコンパイルをしてみる。](https://maywork.net/computer/ubuntu-on-mono-csharp-compile/)
- [【Unity】VSCode でデバッグできなくなった場合の対処方法](https://baba-s.hatenablog.com/entry/2021/10/12/090000)