【Unity】キャラクターコントローラーテンプレートアセット　Third Person Motion Controller

#はじめに
「[Third Person Motion Controller](https://www.assetstore.unity3d.com/#!/content/15672?aid=1100l3oC8)」とは

![スクリーンショット 2018-05-28 19.54.11.png](https://qiita-image-store.s3.amazonaws.com/0/158441/c75bf0dc-5d18-5a08-2da3-b54118cdff94.png)

>あなたのゲームの為の究極のキャラクターコントローラー！

>Motion Controllerは、どんなタイプのモーションにも対応するキャラクターコントローラーです。ジャンプや登る、忍び足などのモーションが簡単に構築でき、必要に応じてプラグインできます。

>Mecanimはアニメーションのブレンドと管理に最適なツールです。しかし、いくつかのモーションではアニメーションとコードを組み合わることが必要となります。このような種類のモーションでは内容を定義する必要があります：何に登ることが可能か、いつ登ることを開始するのか、そしてどのように登りから抜け出すのか、などです。Motion Controllerはこういった種類のモーション処理や、それ以上のことをこなすフレームワークです。

>このキャラクターコントローラーはモーションフレームワークを提供するだけでなく、ほとんどのキャラクターコントローラーが軽視する、核となる機能を内包しています。移動や回転しているプラットフォームのためのサポートや、物理エネルギーの適用やルートモーションデータのクリーンアップといった事柄です。

>構成要素には次が含まれます：
*Motion Controller
* 第三者追跡カメラ
* Mecanim Animator
* Debug Logger
* Object Pool
* Profiler

>内蔵機能：
*拡張可能なモーションフレームワーク
* カスタマイズ可能な重力、設置および滑動設定
* 実行時にルートモーションデータを修正する機能
* 移動および回転プラットフォームへのサポート
* 適用される物理エネルギーのサポート
* NPCのモーションを制御する為の疑似インプット
* モーションカスタマイズ用のインスペクター
* 歩き、走り、忍び足動作
* カスタマイズ可能な落下、ジャンプ、登り、および滑り動作
* プレハブ用サポート
* すぐに使えるWindows Xbox 360用サポート
* 独自のモーション作成用のコード

#他のアセットとの違い
現在アセットストアには多くの３Dキャラクターコントローラー系のアセットが存在しています。
代表格でいうと「[Third Person Controller] (https://www.assetstore.unity3d.com/#!/content/27438?aid=1100l3oC8)」や「[Third Person Controller - Basic Locomotion Template](https://www.assetstore.unity3d.com/#!/content/59332?aid=1100l3oC8)」などがありそれぞれ特徴があります。
簡単にそれぞれのアセットの特徴です。

「[Third Person Controller] (https://www.assetstore.unity3d.com/#!/content/27438?aid=1100l3oC8)」
・TPSやRPGなどのさまざまジャンルが作りやすくバランスが取れている
・カスタマイズする必要がなければ、基本ノンコーディングで実装できる　簡単なプロトタイプならすぐに実装できそう
・カスタマイズする必要がある場合、結構難度が高い
・他アセットの連携が強い

「[Third Person Controller - Basic Locomotion Template](https://www.assetstore.unity3d.com/#!/content/59332?aid=1100l3oC8)」
・[ダークソウル](http://www.darksouls.jp/)　ライクなゲームが得意
・さまざまなギミックなどが用意されている

さて今回の「[Third Person Motion Controller](https://www.assetstore.unity3d.com/#!/content/15672?aid=1100l3oC8)」
・プリセットのアニメーションがリアルにできているので人間に近い動きが作れる　もちろんアニメーションの差し替えができる
・作りがシンプルで、コードもついてるのでカスタマイズが他のアセットより容易
・パルクール的なゲームがつくりやすい
・他のアセットより動きのプリセットが多く細かく設定できる

かならずしも、今回のアセットがいいとは限らないので、なるべくコンテンツに合わせたアセットをおすすめします。

#動作確認
Mac 10.13.2
Unity2017.２.0f3
Third Person Motion Controller　 2.71

#セットアップ
とりあえずキャラを動かせて、キャラに追従するカメラを作りたいと思います。
動かしたいキャラのモデル　ヒューマノイドに対応したモデルを用意します。
適当に新規のシーンを作り床とキャラを配置しましょう。
<img width="756" alt="スクリーンショット 2018-01-28 19.10.00.png" src="https://qiita-image-store.s3.amazonaws.com/0/158441/dcdbf23f-1f15-d146-8a32-547119e9d14d.png">
次にアニメーターデータをキャラのコンポーネントにセットします。最初は慣れるまではプリセットを使った方がいいので、　Assets/ootii/_Demos/Shared/Animator/MC_Humanoid_01をアタッチします。
次にキャラにAssets/ootii/MotionController/Code/Actors/AnimationControllers/MotionController/MotionController.csをAddCompornentします。場所はアニメーターが入っている階層がいいと思います。
アタッチするMotionControllerとActorControllerが付与されます。
<img width="412" alt="スクリーンショット 2018-01-28 19.21.14.png" src="https://qiita-image-store.s3.amazonaws.com/0/158441/77b0baa3-550a-e709-4a58-888b84fd1dc6.png">
次にエディタ上のMotionControllerのMovementTypeのAdventureStyleを選びます。
ちなみにMovementTypeとはキャラ操作のプリセットです。もちろん変えたあとでもカスタマイズや変更などもできます。

<img width="421" alt="スクリーンショット_2018-01-28_19_28_03.png" src="https://qiita-image-store.s3.amazonaws.com/0/158441/0ab8f2e4-2c4f-8821-15cf-cf019c685d5c.png">
選択すると下記のポップが出ますがCloseで
<img width="429" alt="スクリーンショット 2018-01-28 19.33.49.png" src="https://qiita-image-store.s3.amazonaws.com/0/158441/a10e98ea-ac91-cedd-4336-971cf0661353.png">
そうすると、シーン上にInput系やカメラ系のコンポーネントが入ったオブジェクトが生成されます。
<img width="225" alt="スクリーンショット_2018-01-28_19_34_39.png" src="https://qiita-image-store.s3.amazonaws.com/0/158441/42eff15f-72ad-5ab3-f363-d553981d5b03.png">
で再生すると「WASD」キーで移動できて、キャラを追従するカメラができます。

![Jan-28-2018 19-45-20.gif](https://qiita-image-store.s3.amazonaws.com/0/158441/2b3891ef-4356-885f-f8cb-c411161d4c8b.gif)

#MotionController　プロパティ
ここで入力があった時の動きの制御をします。
主に使いそうなプロパティの説明をしたいと思います。
Advancedを選びます。いわゆる詳細設定画面に移ります。
ちなみにデフォルトの画面がBasicです。
<img width="378" alt="スクリーンショット_2018-01-28_20_13_36.png" src="https://qiita-image-store.s3.amazonaws.com/0/158441/dc4dd6ca-7328-8d57-58f5-5edf48237654.png">
すると下記の画面になります。ここで追加の動きの機能を追加できます。
右のチェックボックスで有効や無効など選択でき、下の＋ーボタンで機能の追加できたりします。
<img width="410" alt="スクリーンショット_2018-01-28_20_42_10.png" src="https://qiita-image-store.s3.amazonaws.com/0/158441/e81ca9ea-fe0a-165c-6f91-04b2520e5eb0.png">
それぞれ機能ごとに詳細設定など、決めれます。
設定の仕方は任意項目を選択すると、下に詳細設定が出ます。
今回は「Climb 0.5 Meters」を選択　ちなみにこの機能は障害を登る機能です。
ここでは、Inputのトリガーキーや登れる高さや登れるレイヤーなどを選択できます。
<img width="425" alt="スクリーンショット 2018-01-28 20.51.50.png" src="https://qiita-image-store.s3.amazonaws.com/0/158441/8c9b29ee-daa4-0ac5-822c-d77bf1ad07fa.png">
これらは、もともとプリセットに入っているものなのでもしプリセットに入っていない機能や別のモーションを使いたい場合は新規に作る必要があります。マニュアルの方が詳細載っていのでそちらを参照してください。 http://www.ootii.com/Unity/MotionController/MC2Guide.pdf

#プリセット機能
あらかじめ入っているプリセット機能はすごく豊富なのでいくつかピックアップしてみたいと思います。
登る　「Climb ２.5 Meters」
![Jan-28-2018 21-20-59.gif](https://qiita-image-store.s3.amazonaws.com/0/158441/6b7caf33-1a29-1096-afa7-0a69f611e913.gif)

はしご登る「Climb Ladder」
![Jan-28-2018 21-21-36.gif](https://qiita-image-store.s3.amazonaws.com/0/158441/95c7d234-6fc6-8c3f-3ba9-706bfbf1eff2.gif)

壁登る「Climb Wall」
![Jan-28-2018 21-22-00.gif](https://qiita-image-store.s3.amazonaws.com/0/158441/39c46a6a-3973-e189-e9e2-b42c07ef7892.gif)

障害物越える「Vault 1 Meter」
![Jan-28-2018 21-28-29.gif](https://qiita-image-store.s3.amazonaws.com/0/158441/723176ce-a228-f657-db56-c5aef4e8df56.gif)

飛び移る「Climb Crouch」
![Jan-28-2018 21-29-04.gif](https://qiita-image-store.s3.amazonaws.com/0/158441/23eeac5c-a202-693c-6aa4-f77899c6d801.gif)

バランス移動「Balance Walk」
![Jan-28-2018 21-29-32.gif](https://qiita-image-store.s3.amazonaws.com/0/158441/fb6a2aec-2352-05bc-2333-c2490f7d1b9f.gif)
#最後に
アセットボリューム的には個人的に他のアセットよりは少なく感じますが、個人的にはカスタマイズがしやすい点とリアリティのある動作をしたいのであれば「[Third Person Motion Controller](https://www.assetstore.unity3d.com/#!/content/15672?aid=1100l3oC8)」をおすすめします。
習得難度はやや高めですが最初のプロトタイプに使ってみてはいいかなと思います。