MixamoをUnityで使おうぜ

# Mixamo何するものぞ
[Mixamo](https://www.mixamo.com/)とは、3Dモデルやアニメーションを無料で商用、非商用問わず利用することができるWebサービスです。
Adobeが運営しているサービスで、利用にはAdobeアカウントが必要です。
![Mixamo_top.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526299/c13038f6-745b-5012-0ddb-111409724e93.png)
3Dモデルもアニメーションも種類が豊富かつハイクオリティで、画面右側のパネルでアニメーションを微調整することもできます。

非常に便利なサービスなのですが、MixamoのアセットをそのままUnityにインポートするといくつか問題が発生します。この記事では自分が出くわした事案とその解決法をご紹介します。

# 事案1.テクスチャが貼られていない
今回使おうと思うのはこちらのDouglas君です。
![douglas.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526299/d836f7e5-9227-c1a0-b4a8-57136bdcfa6b.png)

さてDouglas君をUnityにインポートしました。すると...
![douglas_white.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526299/ba16c4c5-5436-9877-8c99-9b21057b26eb.png)
驚きの白さ。キン消しみたいになっちゃってますね。

## 解決法
テクスチャが貼られていないのはテクスチャが存在していないからです。fbxファイルの中に埋め込んであるのでこれを引き出してあげる必要があります。
![extract_texture.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526299/d96b7e7d-864d-a652-6353-f9f5302d0d08.png)
ImportSettingsのMaterialsタブにあるExtract Texturesボタンを押してください。テクスチャの展開先を適当に選んでやればモデルの中に埋め込まれていたテクスチャが生成されます。なおMaterialへの適用は自動で行われます。便利！
![douglasWithTexture.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526299/8badfdf0-8fb6-fef1-5930-ebb70cde4241.png)
...狂ってますね。事案2です。

# 事案2.透けている
お腹が出ちゃってますね。物理的に。袖も若干突き破ってますし眼球もシンプソンズみたいになっています。

## 解決法
これはMaterialのRendering ModeがTransparentになっているのが原因です。
![material_setting.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526299/1b2c03ed-8695-6659-f326-dd2c0b69262e.png)
ですがこちらのMaterialもfbxの中に埋め込まれているため設定を変更することができません。テクスチャと同様にfbxから引き出してあげましょう。
![extract_mateerial.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526299/adafe22e-e114-088b-cc85-1e61d08a23a6.png)
ImportSettingsのMaterialsタブにあるExtract Materialsボタンを押してください。
Materialが個別に生成されると思うのでいい感じに設定を変更してあげましょう。
![douglas_color.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526299/75652490-e156-bfcd-27ee-c95ae9e6c07b.png)
シンプソンズみたいだったDouglas君がウィル・スミスみたいになりました。地球の1つや2つは救ってそうな面構えです。

# 事案3.足首が折れている
3Dモデルは問題なくインポートすることができました。このモデルをゲームキャラクターとして使用するにはアニメーションが必要です。
![douglas_run.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526299/6362d6a9-9f2f-c37c-0781-4dcb7c1925e2.gif)
今回はこちらの走るアニメーションを使おうと思います。

ドラッグ&ドロップでインポートし、Animation TypeをHumanoidに変更します。
そのプレビューがこちらです。
![unityModel_run.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526299/d6eb5eb9-efb6-9517-0635-2f0ed9902e80.gif)
左足首にご注目下さい。折れてます。Mixamoのアニメーションアセットに含まれているAvatarはUnityのMecanimに上手く対応できないようですね。

## 解決法
アニメーションのfbxのImport SettingsのRigタブのAvatar DefinitionをCopy From Other Avatarに変更し、Sourceに適当なHumanoidのAvatarを入れましょう。
![running_setting.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526299/dd36e892-d224-e283-8b51-bd4e5309c572.png)
今回はDouglasのAvatarを入れています。事前にDouglasのAvatarをDouglasのImport SettingのRigタブからHumanoidに変更しておくようにしましょう。
変更した結果がこちらです。
![unityModel_run_proper.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526299/222564f0-f859-ee97-34f1-01d0717abf1a.gif)
足首が治っていることはもちろん上半身も自然な感じになっています。

# まとめ
Mixamoは便利なサービスですがUnityで使うにはひと手間必要です。そこら辺を勝手にやってくれるAssetPostProcessorを作りました。
https://github.com/Dumble009/MixAmoAssetImporter
こちらを使えば今回の記事で取り上げたような操作を自動で行ってくれます。お試しください。