mocopiの動きをUnityで再生する

# 概要
mocopi で取得した BVH ファイルを Unity上で再生する

Mac でのみ検証しています

# 必要なもの
- Unity
- Blender

# 手順
## Unity と Blender をインストールする
ここでは省略します

## BVH を FBX に変換する
以下のスクリプトを保存します
```python
"""
mocopi bvh->fbx converter
"""

import bpy
import sys
import argparse

parser = argparse.ArgumentParser()
parser.add_argument('file', type=str, help='input mocopi record file *.bvh')

args = parser.parse_args(sys.argv[sys.argv.index('--') + 1:])

# frame rateを50fpsに変更
bpy.context.scene.render.fps = 50
# bvhファイルをインポート
bpy.ops.import_anim.bvh(filepath=args.file)
# fbxファイルにエクスポート
bpy.ops.export_scene.fbx(filepath=args.file[:-3] + 'fbx', object_types={'ARMATURE'})
```

以下のコマンドを実行します。
`<script>` は `mocopi_bvh_fbx_converter.py` のパスを
`<bvh>` は 変換するBHVファイルのパスに置き換えてください

### Mac
```shell
/Applications/Blender.app/Contents/MacOS/Blender -b -P <script> -- <bvh>
```

### Windows
```shell
"c:\Program Files (x86)\Steam\steamapps\common\Blender\blender.exe" -b -P <script> -- <bvh>
```

実行後にBVHファイルと同名のFBXファイルが生成されます


## モデルを追加
ここでは ユニティちゃん を使用します

以下のページの最下部からライセンスに同意して、データをダウンロードします。
今回は `ユニティちゃん 3Dモデルデータ` を使用しました
https://unity-chan.com/contents/guideline/

ダウンロードした `UnityChan_*.unitypackage` ファイルをUnityプロジェクトのAssetsに追加します。
`Import Unity Package` では全て選択した状態で `Import` を押します

UnityChan > Models > unitychan をシーンに追加します。


## ユニティちゃんのピンクを解消する
ユニティちゃん がピンク色になっていない場合は飛ばしてください
<img width="949" alt="スクリーンショット 2024-01-15 16.09.51.png (208.3 kB)" src="https://img.esa.io/uploads/production/attachments/13979/2024/01/15/148142/8f0b36db-c17e-4663-b53e-01645fb52b73.png">

Unityの上部のタブから Window > Package Manager を選択します。
以下の画面の左上の `＋` を押して `Add package from git URL` を選択します
<img width="1050" alt="スクリーンショット 2024-01-15 16.06.48.png (330.6 kB)" src="https://img.esa.io/uploads/production/attachments/13979/2024/01/15/148142/f9d7316e-53fb-4d56-b4ac-3dc8223af600.png">

`com.unity.toonshader` と入力して `Install` を押します
<img width="1050" alt="スクリーンショット 2024-01-15 16.07.04.png (323.5 kB)" src="https://img.esa.io/uploads/production/attachments/13979/2024/01/15/148142/51009c88-f5ba-499e-a7cf-edd1ddc1c9b2.png">

インストールが完了すると ユニティちゃん が正しく表示されます
<img width="949" alt="スクリーンショット 2024-01-15 16.09.04.png (480.8 kB)" src="https://img.esa.io/uploads/production/attachments/13979/2024/01/15/148142/6189dd14-4d5b-402b-8b49-aab882d137b7.png">


## モデルにモーションをつける
### FBX を取り込む
FBXファイル をAssetsに追加し、Animasion Clip(三角形のもの) を選択します
<img width="949" alt="スクリーンショット 2024-01-15 16.40.37.png (272.8 kB)" src="https://img.esa.io/uploads/production/attachments/13979/2024/01/15/148142/f439663a-fe52-4fc6-8174-abca32f43198.png">

`Inspector` タブの右上の `Edit` を押します
<img width="964" alt="image.png (115.5 kB)" src="https://img.esa.io/uploads/production/attachments/13979/2024/01/15/148142/df6e9612-34f7-4aa5-80cb-517c63e821ba.png">

`Rig` を選択し、`Animation Type` をGeneric から `Humanoid` にします
<img width="949" alt="スクリーンショット 2024-01-15 16.44.55.png (375.8 kB)" src="https://img.esa.io/uploads/production/attachments/13979/2024/01/15/148142/a75e325e-9454-45b4-b13d-ed51bf8599f5.png">

### Animator Controller を追加する
Assets で右クリックをし、Create > Animator Controller を選択します
<img width="949" alt="スクリーンショット 2024-01-15 16.48.08.png (437.6 kB)" src="https://img.esa.io/uploads/production/attachments/13979/2024/01/15/148142/d4ef1f08-e2fd-4e54-9567-a80d3f8d0eec.png">

追加された Animator Controller をダブルクリックし、Animatorタブを開きます

Animasion Clip をドラッグドロップし、Animator Controller に紐づけます
<img width="1786" alt="image.png (227.8 kB)" src="https://img.esa.io/uploads/production/attachments/13979/2024/01/15/148142/1d458c6d-8829-4a4d-b972-ca620bbd22ce.png">

Hierchy で ユニティちゃん を選択し、
Animator の Controller に 先ほど作成した Animator Controller を指定します
<img width="1786" alt="image.png (363.4 kB)" src="https://img.esa.io/uploads/production/attachments/13979/2024/01/15/148142/c3858d2d-cbb5-46c7-bcd0-b4a9805558d0.png">

あとは再生ボタンを押すことでモーション見るができます。


# より便利にする方法
- [mocopiのBVHファイルからFBX形式に楽に変換する(Mac)](https://qiita.com/SatooRu65536/items/c6251d747d272af5bf97)
- [mocopiの動作をUnityで再生時にテレポートさせない方法](https://qiita.com/SatooRu65536/items/6302d1aab3ab16223061)


# 参考サイト
- [afjk/mocopi_bvh_fbx_converter.py(GitHub Gist) ](https://gist.github.com/afjk/8bf1dd3eb6c42af7dcae76246ad9401b)
- [mocopi のアニメーションデータbvhをfbxに変換する](https://qiita.com/afjk/items/334b69727ea473a53190)
- [【Unityちゃん】ピンクになった時の解決策と原因【3Dオブジェクト】](https://youmanavisions.com/programming/post-19774/)