LGSVL Simulator 開発環境の構築手順

##はじめに
LGSVL SIMULATOR (現SVL SIMULATOR) の開発環境を構築するための手順です。

英語を読むのが苦じゃない人は公式のドキュメント↓を見てください。
https://www.svlsimulator.com/docs/archive/2020.03/build-instructions/

注意：2021年3月のアップデート（バージョン2021.1~）で、シミュレータのUIが大きく変更となりました。開発環境の構築手順はほぼ同じですが、記事の画像はすべてバージョン2020.3時点のものですので、ご注意ください。

## 環境など

- OS：Ubuntu16.04
- シミュレータバージョン：2020.3

## 準備
### UnityHubをインストール
<b>UnityHub</b>は、Unityのプロジェクトなどを管理をするアプリケーションです。

インストール方法をはじめ、日本語のサイトがたくさんあるので、そちらを探してみてください。

### Node.jsをインストール　（2021.1以降は不要）

こちらを参照してください。バージョン12.16.1LTSを入れてください。

https://github.com/nodesource/distributions/blob/master/README.md#debinstall

### git-lfsをインストール

こちらを参照してください。

https://docs.github.com/en/repositories/working-with-files/managing-large-files/installing-git-large-file-storage

### Vulkanをインストール

```
sudo apt-get install libvulkan1
```

##シミュレータの構築

###ソースのダウンロード

まず、シミュレータのソースをLGSVLのリポジトリからクローンします。

```
git clone --single-branch https://github.com/lgsvl/simulator.git     # 最新バージョンを入れる場合
git clone https://github.com/lgsvl/simulator.git -b release-2020.03    # バージョンを指定する場合
```

クローンは結構長いので気長に待ちましょう。クローンが完了すると、"simulator"という名前のフォルダができているはずです。

###シミュレータのビルド

次に、UnityHubを起動しましょう。
UnityHubの実行ファイル( UnityHub.AppImage )がある場所でterminalを開いて、次のように実行します。

```
sudo ./UnityHub.AppImage --no-sandbox
```

すると、こんな画面が表示されます。まずは、<b>[ リストに追加 ] </b>をクリックしましょう。
![31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/595422/ab2be7ec-437a-b4e6-953d-b8e645c4fa6a.png)

ディレクトリを選択するウィンドウが出てくるので、先ほどクローンした <b>"simulator"</b> フォルダを選択して [ OK ]。
![32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/595422/b3478a3b-11a9-19e3-75a3-ae3807c04e02.png)

すると、プロジェクトに "simulator" が追加されます。
![33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/595422/efe97892-980e-f2ce-4e77-b2306be23e39.png)
ここで、おそらく「Unity20xxをインストールしてね！」というような感じのメッセージが出ると思いますので、指示に従ってインストールを行ってください。（この画像はすでにUnityをインストールした状態です）

注意点として、途中でオプションを選択する必要があります。
Choose Componentsという画面になったら、必ず

- Linux Build Support
- Windows Build Support

この２つにチェックボックスを入れてください。

Unityがインストール出来たら、上画像の赤い矢印のところをクリックして、プロジェクトをロードします。

ロードが完了すると、このようなUnityのエディタが表示されます。
![35_unity.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/595422/d73a8fe5-64e2-249a-9275-14ac6ab03ba5.jpeg)

ここで一旦、terminalを開いて次のコマンドを実行してください。（2021.1以降は不要）

```
cd simulator/WebUI
npm install
```

これが終わったら、再びUnityに戻ります。

<b>Simulator > Build WebUI</b> を実行します。（2021.1以降は不要）
![50_build_webui.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/595422/70d72538-bef7-83b1-5b82-ab4dae920c6b.png)

WebUIのビルドが完了したら、<b>Simulator > Build</b> からビルド画面を表示します。
![51_build.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/595422/06ace9ab-04d1-cb28-b35a-c4febc23420d.png)


こんな画面が出てきます。
![51_build2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/595422/19958c68-1b51-e8b0-6153-81a837825b06.png)

<b>Executable Platform</b> のところが、<b>"Linux"</b> になっていることを確認します。
<b>Build Simulator</b> にチェックを入れて、ビルドしたシミュレータの実行ファイルを置く場所を選びます。
![51_build_check.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/595422/4b5e3c87-6b5d-55ee-0ca9-e29379f4bebd.png)
確認したら、一番下の <b>[ Build ]</b> をクリックします。

ビルド中はこんなウィンドウが表示されます。最初のビルドはかな～り長いです。気長に待つというより、他の作業をした方が良いでしょう。
![51_building_sim.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/595422/667609ff-2276-d386-7525-8adcb6027b06.png)

ビルドが成功したら、実行ファイルが出来ているはずです。
![60.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/595422/511184d5-111e-d66d-15c2-9e93c996ebef.png)
これをクリックするか、terminalで実行しましょう。

こんな画面が表示されます。画質などを選択して [ OK ]。
![61.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/595422/79cc743f-51fe-1887-b320-b06635dfa468.png)

ダウンロード版と違って、最初にUnityのロゴがっ！
![62.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/595422/2d9bc85a-95b2-c9c1-a22e-f0f7187e0e96.png)

そのあと、シミュレータのスタート画面が表示されます。
![63.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/595422/438e5a86-abac-cf93-3fe4-630210249603.png)
ここから先の操作はダウンロード版と同じですので、動作確認を行ってください。

##おわりに

以上で、シミュレータ開発環境の構築は完了であります。
あとは好きなようにC#なりなんなりを弄るわけですが、どこを触ると何が起きるのか、さっぱりわかりません。誰か記事にしてくれるとうれしいです。。。

また、ここでは紹介しませんが、シミュレータで使う環境や車も作成できます。こちらは後日記事にするつもりです。

それでは。