RecastNavigationを使ってナビゲーションAIを学習していく

# 初めに
　以前からゲームAI(主にナビゲーションAI)に興味がありUE4やUnityを触ってみたいと思っていましたが、ただ単にエンジンを使ってもプログラマーとしては面白くありません。なので、出来る限り自分の手でナビゲーションAIやキャラクターAIをやっていきたいんですが、全て一からやるには凄い時間と労力がかかってしまうのでいい方法がないかと探していた時に、RecastNavigationを使っていこうと思いました。
　ですが、調べていくうちに思ったのが、日本語で書かれているサイトがほぼ無い。なので、メモを兼ねて書いていくことにします。

[第２回](https://qiita.com/HnniTns/items/5107e9ff3872c8d03632)をあげました。
[第３回](https://qiita.com/HnniTns/items/721dcec621fa6168b395)をあげました。
[第４回](https://qiita.com/HnniTns/items/8189beabbab3fe841ac6)を上げました。
追記-[第5回](https://qiita.com/HnniTns/items/aed13aa99f7a0310e2b1)を上げました。

# RecastNavigationとは
※分かっている人はとばしてください。

名前だけでも知っている人はそこそこ多いのではないでしょうか？
主にナビゲーションメッシュの生成、ナビメッシュを使用した経路探索などを役割とするライブラリです。
このライブラリはとても有名なナビゲーションメッシュのライブラリです。UE4やUnityなどは勿論、他の有名なゲームライブラリには大体RecastNavigationライブラリを拡張して使用されています。という感じに簡単に説明と紹介、詳しくは調べてください。

# RecastNavigationの導入

※自分の環境はWindows10でVS2019です。

### ダウンロード関係
1. 早速英語ですが気にせず、[ここ](https://github.com/recastnavigation/recastnavigation "https://github.com/recastnavigation/recastnavigation") (GitHub)からRecastNavigationライブラリ本体を「クローン」なり「Zipダウンロード」をして保存してください。
2. 次にSDLライブラリ(Development Libraries)を[ダウンロード](https://www.libsdl.org/download-2.0.php "https://www.libsdl.org/download-2.0.php")して、一旦適当な場所に保存してください。2019/12/02時点では「SDL2-2.0.10」になっています。（OpenGLで描画しているみたいです）
3. 更に、premake(Ver5.0α)を[ダウンロード](https://premake.github.io/ "https://premake.github.io/")して、同じく適当な場所に保存してください。

### デモをVS2019上で実行するまで

1. 「recastnavigation-master\RecastDemo\Contrib」のフォルダー内にSDLライブラリのフォルダー（SDL2-2.0.10）を丸ごとコピーしてください。
2. フォルダー「SDL2-2.0.10」の名前を「SDL」に変更してください。
3. 「recastnavigation-master\RecastDemo」のフォルダー内にpremake（premake5.exe）をコピーして下さい。
4. コマンド プロンプトを開きます。
5. premake5.exeを保存した場所によるのですが、Dドライブに保存している場合は最初に「d:」を入力してください。
6. Cドライブの場合は「C:¥Users¥(ユーザー名)>」になるので、これを除いた「premake5.exe」のフォルダーまでのパスを「cd 」の後に入力してください(ディレクトリの移動)。※例デスクトップ上にある場合（C:¥Users¥(ユーザー名)>cd Desktop\recastnavigation-master\RecastDemo）
7. 最後に「C:\Users\ (ユーザー名)\Desktop\recastnavigation-master\RecastDemo>premake5.exe vs2019(VSのバージョンによって変わります)」と入力してください。
8. すると自動で文字が出力され、「premake5.exe」が存在するファイル内に「Build」フォルダーが生成されます。
9. 結果がこんな感じになると成功です。

![コマンドプロンプト.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/540257/ad5c2dc6-2945-45df-3658-b7e43f85cfe4.png)
10. 「Build\vs2019\recastnavigation.sln」をVS2019で起動し、ビルドして実行してください。
11. 実行できれば問題ないのですが、「～は有効なWin32アプリケーションではありません」などのエラーを発生する場合があるので（自分はそうなりました）、ソリューションエクスプローラーから「RecastDemo」を右クリックします。「スタートアップ プロジェクトに設定」をクリック。
12. これで、実行できるはずです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/540257/552bb8d5-c269-252a-37e6-5bf8fe766eba.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/540257/aad1050f-7db8-2dae-74c8-29f84a252f19.png)

4～9に4時間かかったとは言えない...orz

# エディタの軽い説明
### メッシュデータの読み込み
・右にあるPropertiesの「Input Mesh」で読み込まれ、上にある「Sample」で選択すれば表示される。「RecastDemo\Bin\Meshes」フォルダー内のObjのメッシュデータが呼ばれているみたいです。
### カメラ操作
| 操作 | 効果 |
|:-:|:-:|
| WASD(方向キー) | 前後左右移動  |
| マウスホイール | 前後移動 |
| Q, E(PGUP, PGDN) | 上下移動 |
| 右クリック長押しAndマウス操作 | カメラの向き変更 |

### 経路探索
・メッシュ上で右クリックでスタート地点の設定
・メッシュ上で左クリックでゴール地点の設定
・Propertiesの下の方にある「Build」で実際に経路探索を実行（ナビメッシュの生成を毎回or初回だけ行っているのかは確認出来ていません。流石に毎回行っているとは思えませんが...。）
↓経路探索の例
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/540257/8e212bde-00f9-5829-6e2d-6c26b4fe0d02.png)

# 次回
このエディタのソースを見ながら何が何を行っているのかを確認します。なので、次回はエディタの詳しい内容になると思います。
自作のライブラリに組み込む際のインターフェースはUnityを参考にしようと思っています。

※そういえば、UE4はオープンソースになっているのでどういう風に組み込まれているのか見てみたいですね。

# 参照元
・https://github.com/recastnavigation/recastnavigation （RecastNavigationライブラリ）
・https://www.libsdl.org/download-2.0.php （SDLライブラリ） 
・https://premake.github.io/ （premake）
・https://github.com/premake （premakeのGitHub）
・https://qiita.com/ousttrue/items/6d837d6daba47b51bd8e （premakeの紹介）
以下、デモ実行手順の参考
・https://imzlp.me/posts/20203/ 
・https://segmentfault.com/a/1190000015272594
・https://www.cnblogs.com/chobits/p/5416144.html
　なぜかRecastDemoなどで調べると中国語のサイトが多いですね。