Unity用ドローンシミュレータ「AirSim on Unity」の内容説明並びに導入方法

#前書き
こんにちは、tyoと申します。

先日、とある目的にために「AirSim on Unity」を使用しました。
しかし、このソフトを解説しているサイトは皆無です。
その結果、英語の文書を読み漁りながら試行錯誤する羽目になりました…

そもそも、このソフトは通常のアセットとは異なり、導入に多くの知識を要します。
unityに関する基本的な事項は勿論のこと、それに加えてcmake(ビルド作業)やgit(ダウンロード時に必要)に関する知識が無いと、滞りなく導入するのは難しいでしょう。
加えて、readmeが実際の内容と一致していなかったり、rigidbodyが一部使用不可だったり…
と躓きポイントも多数存在するため、事前情報は必須です。

本記事では、これから「AirSim on Unity」を使用するユーザの皆様が、私と同じような困難な目に合う事を避けるべく、作成しました。(自身の備忘録も兼ねてますが…)
Qiitaの利用は初めてなので、過不足が生じるかもしれませんがよろしくお願いします。

##「AirSim on Unity」とは？
そもそも"AirSim"とは、Unreal Engineというゲームエンジン用にMicrosoft社が作成した無料のシミュレータソフトです。
今回紹介する「AirSim on Unity」は、その"AirSim"をUnityに移植したバージョンとなります。
ちなみに、Unity上のアセットストアでは配布されていない「外部アセット」に該当します。そのため、導入手順が煩雑です。

一般にダウンロード可能になったのが2018/11/14であるため、本記事を執筆している現時点では、まだ登場から1年も経っていないソフトウェアです。
それ故に、ネット上で得られる情報はとても少ないのが現状であり、特に日本語の記事では存在を示す以上のサイトは皆無です。

「AirSim on Unity」では具体的には車(Car)とドローン(Drone)の2種類の車両をシミュレートすることができます。
特にドローンのシミュレータを無料で利用できるのが大きな利点です。現時点でAirSim以外で無料で使用できるアセットとなると、体験版としてストアに公開されているアセットしか使うことができません。そのため、実用性・拡張性がどうしても低くなってしまいます。

参考ページ
[・AirSim公式(GitHub)](https://github.com/microsoft/AirSim)

##使用環境/最初に準備しておくソフト
私は"Windows 10 Home Premium"のPCを使用しました。Linuxでは手順が異なるため、上述したAirSim公式のページと見比べながら進めた方が良いです。
また、以下のソフトを使用します。
・Unity  2018.2.21f1
・Visual Studio 2017

**Unityはバージョンを（可能な限り）合わせてください。**最新版では動作しないことを確認しています。
公式では「2018.2.15f1」を挙げていますが、このバージョンは現在ダウンロードすることができないため、「2018.2.21f1」で代用します。(動作確認済み)
現在のUnityでは"Unity Hub"を用いて旧バージョンをインストールすることができます。
(Unity Hubのダウンロードは[こちらから](https://store.unity.com/ja/download?ref=personal&_ga=2.148984694.171912014.1566676152-1582825473.1551367927))
また、Unityを日本語化していることを前提としている箇所があります。[こちらのページ](https://www.sejuku.net/blog/56333)を参考にして日本語化しておいてください。

**Visual Studioでは「C++用のコンパイルツール」(現時点での名称は“Visual C++ Build Tools”)を予めインストールしてください。**
専用のコマンドプロンプトでビルドを行う時に必要です。

##実際の導入作業
長くなるので作業毎に記事分けします。
リンクから飛んでください。

######とりあえずUnityの実行ボタンが押せるようになるまで

[①AirSimのダウンロードとビルド作業](https://qiita.com/tyo/private/4d938792b87bc2ee4647)

[②Unityへのインポート作業～実行](https://qiita.com/tyo/private/966e3ef2358f99fdd99b)

######ドローンを動作させる

[③ドローンを操作するプログラムの作成](https://qiita.com/tyo/private/cd07492682fe53391c43)

[④settings.jsonで色々設定してみよう](https://qiita.com/tyo/private/249aeb46ec3dd7ff7db2)

[⑤ポジションを設定する(非推奨)](https://qiita.com/tyo/private/6e3e144f0e6ce27c5ce9)

##おわりに
いかがでしたでしょうか。
一応、知識として伝えられることは全てここに書いたつもりです。

余談ですが、AirSimでは「API」を公開しているため、そちらを追加することでも機能の追加・変更を行うことができるようです。
ただ、私の実力と時間では、APIの使い方はわかりませんでした。
一応「UnityでAPIを利用してドローンを操作するプログラムを作成した」という旨の報告がされているページも存在しているため、どうやら可能ではあるらしいのですが…
[公式の説明](https://github.com/Microsoft/AirSim/blob/master/docs/apis.md)を見て使い方が分かった方がいらっしゃれば、是非とも記事にまとめて頂けると幸いです。

##後書き:筆者が「AirSim on Unity」利用した経緯
冒頭で「とある目的にために使用した」と述べましたが、"とある"って何ぞや？ってことを軽くおまけ程度に書いて締めようと思います。感想文みたいなものなので、スルーして頂いて構いません。

私は大学で「自由課題型の実験」を行ったのですが、実は「マイコン(Arduino)を使って新しいシステムを作る」という内容でした。どちらかというとハード寄りの内容ですね。
一応「ゲームでも実験性のあるものなら可」ということでしたので、当初はゲーム作りを目標に計画を進めていました。そこで一冊の本を読んだとき、「UnityとArduinoは連携できるよ！」なんて情報を聞いて、「3Dゲームならドローンとか良くね？」とかテキトーに考えたのが(悪夢の)始まりでした。

AirSimの導入難易度はバカ高いし、当初予定していた連携用アセット(Uniduino)はサポート切れで使えないし…と予期せぬ事態が続けておきました。
そのため、最終的にはゲーム性を完全に捨て去り、"実用性"にステータスを全振りする結果となりました。
といっても、「Arduinoを傾けるとドローンが動く」といったシンプルすぎるものでしたし、何より5週間で完成させるために自由時間はほとんど潰れる始末でしたが…

しかし、とても勉強にもなりました。
そして何より、Qiitaのページでこの内容を執筆したのも、調べるうちに幾度となくQiitaの他のライター様の記事にお世話になった経緯があるからです。

Unity-Arduino間のサンプルプログラムも需要があれば追加で記事にしようと思います。といっても、既存のプログラムを少し弄っただけですが…必要であれば気兼ねなくコメントしてください。
ここまでのご閲覧、ありがとうございました。