Unityでパリピ孔明のモーションデータをVRMモデルに流し込んでみた

# 発端
**友人「パリピ孔明が公式にダンスモーションを配布してるから、自分のモデルを踊らせてみたいんだけど、やり方が分からないから教えて」**
**おおや「よっしゃ任せとけ！」（俺も分からん）**

という経緯から、
Unity初心者があれこれ調べながらパリピ孔明のモーションデータをVRMモデルに流し込んだときの記録です。

# 偉大なる公式様
https://paripikoumei-anime.com

https://booth.pm/ja/items/3872754

# 1. Unityプロジェクトの準備
UnityHubを起動して、新しいプロジェクト→3D→プロジェクト名と保存場所を指定してプロジェクトを作成

|<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2698055/d3f09a4f-2d10-44a9-fe39-b98e6b809818.png" width="100%">|<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2698055/e9e568e5-e5a0-17e5-66b7-af8e6486c766.png" width="100%">|
|:-:|:-:|


# 2. VRMモデルをインポートする

1. VRMモデルをUnityにインポートするために、以下のページからVRM用のパッケージをダウンロードする

https://github.com/vrm-c/UniVRM/releases

|<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2698055/b343ff17-3a47-d7f6-78ac-015c32924f89.png" width="100%">|
|:--:|

2.ダウンロードしたパッケージをダブルクリックすると以下のウィンドウが表示されるので、Importを選択する
2.1 バージョンの新しいUnityだとスクリプトを更新するか確認されるので、Yesのどちらかを選択する
3.その後、インポートしたパッケージの推奨設定にするか聞かれるので、Accept Allを選択する
4.Thank you!　→　Close

![005_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2698055/bb581529-c39d-3e63-0cfd-4d2c9a2f10a2.png)

|![005.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2698055/b5e5b292-725d-54ab-9751-19ff38a1c961.png)|
|:--:|

5.UnityのAssetsフォルダにVRMファイルをドラッグ＆ドロップする（左図）
6.自動的にVRMモデルのprefabが生成されるので、Hieralchyウィンドウにドラッグ＆ドロップする（右図）

|![007.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2698055/8b8b9409-96f6-0094-12bf-55bb3c92f829.png)|![008.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2698055/7e325aae-fa96-bcb9-00ce-79c65d01ba49.png)|
|:--:|:--:|

---
**これでVRMモデルの準備はOK**
![009.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2698055/7eaed7af-fb19-f18e-55ab-f5c521120faa.png)

# 3.パリピ孔明のダンスモーションデータ（.fbx)をインポートする
1. 公式からダンスモーションデータをダウンロードし、解凍する。
1. 解凍したら、フォルダ内のfbxファイルをUnityのAssetsフォルダにドラッグ＆ドロップする

https://booth.pm/ja/items/3872754

![010.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2698055/74ad19a6-0dab-7b69-6d3c-959238569fd7.png)

1. Assetsフォルダのfbxファイルを左クリック
1. 画面右のInspecterウィンドウのRigを選択する
1. Animation TypeをHumanoidに変更する
1. 変更したらApplyをクリックして適用する
![012.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2698055/ec079b80-df74-dc60-9193-7c9a890a67c6.png)

1. Assetsフォルダのfbxファイル右にある三角ボタンを押し、表示されたデータを選択する
1. 画面上部のメニューバーから、Editを開き、Duplicateを選択してデータを複製する（Ctrl+Dでも良い）
![013.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2698055/254195f0-543c-2977-7d1d-bb8ade03009c.png)

# 4.アニメーターコントローラーを作成する
1. Assetsフォルダ内で右クリックし、Create → Animator Controllerを選択する
![014.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2698055/05765f38-1857-7dd5-8cb9-5385b9666cb5.png)

1. 作成したAnimator Controllerをダブルクリック
1. 表示されたAnimatorビューに3.6で複製したデータをドラッグ＆ドロップする
![015.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2698055/7d0dc034-ada9-c2e3-9ed4-143178e17e2e.png)
### これでモーションデータの準備はOK

# 5.VRMモデルにモーションデータを流し込む
1. 画面上部にあるSceneタブをクリックして、画面をSceneビューに切り替える
1. HieralchyウィンドウでVRMモデルを選択する
1. 画面右側のInspectorウィンドウ内にAnimatorカテゴリがあるので、スクロールして表示しておく
　　※ホイールでスクロールすると見つけにくいのでスクロールバーを動かすと良い
1. AssetsフォルダのAnimator ControllerをAnimatorカテゴリのControllerにドラッグ＆ドロップする
　　※ドラッグ＆ドロップしづらい場合はControllerの右にある◎ボタンを押すと表示されるウィンドウで選んでもOK
![016.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2698055/9bc78506-f5db-6562-71c3-ec40d2683917.png)

# 6.動かしてみる
**VRMモデルとモーションデータの接続が完了したので、もうPlayボタンを押すと踊ってくれるものの、カメラの設定をしないと遥か遠くで踊り始めてしまうので、まずはカメラの位置を調整する**

1. Sceneビューでは右ドラッグでビューの向きの調整、ホイールボタンのドラッグで視点の上下左右を移動できるので、良い感じに視点を調整する
1. 視点の調整ができたら、HieralchyビューのMainCameraを選択する
1. MainCameraを選択した状態で、メニューバーからGameObjectを開き、Align With Viewを選択する
1. MainCameraが視点の位置に移動するので、さらに細かい調整は画面右側のInspectorウィンドウのTransformからPositionやRotationの値で行う
1. 画面上部の中央にあるPlayボタンを押す
1. **ビューがGameビューに切り替わり、VRMモデルが踊る！**

![017.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2698055/eab678e0-3c1a-47b4-aaf9-cd28a62dbc91.png)

**VRMモデルとモーションデータの接続に成功したので、あとはステージアセットと音楽データをインポートして設定すれば、良い感じにパリピ孔明のOPのように踊ってくれるはずですが、今回はここまで。お疲れさまでした。**

# 7.おまけ
**友人「ここまで出来たらあとはクロマキーで動画作るから大丈夫！」**

https://www.youtube.com/watch?v=H7chyJ21rJk

# 8.おまけのおまけ
**Unityでグリーンバックにする方法**
1. HieralchyウィンドウでMainCameraを選択する
1. InspectorウィンドウでClear FlagsをSkyboxからSolid colorに変更する
1. Backgroundの色をグリーンに変更する（グリーンだとクロマキーで抜けない人は他の色で）
![018.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2698055/b1e01b26-5807-959f-4fd0-60b0647a1a42.png)

**Unityでの動画撮影方法**
1. メニューバーからWindowを開き、Package Managerを開く
1. Package Managerの検索窓にRecorderと入力する
1. Recoderが表示されたらInstallを押す
![019.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2698055/70471150-13fa-a878-ac26-22e5bee3ce62.png)

1. インストールが終わったら、メニューバーからWindowを開き、General>Recorder>Recorder Windowを開く（左図）
1. Recorder WindowのAdd Recorderを押し、Movieを選択する（中央図）
1. Output Resolution(出力時の解像度）、Media File Format(ファイル形式）、Quality（動画品質）を選ぶ（右図）
1. File Name（ファイル名）、Path（出力する場所）を選択する
1. 画面左上のPlayボタンを押すとGameビューに切り替わり、動画撮影が始まる
1. もう一度Playボタンを押すと動画撮影が終わる（Gameビューは動き続けるので別に止める必要がある）

|![020.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2698055/bab943e5-736a-7a78-d696-95d5490269ec.png)|![021.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2698055/43aafea2-94df-2d49-0a57-b9f8092036a8.png)|![022.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2698055/a52a587e-f19e-8574-b076-2d4f3e7ea435.png)
|:--:|:--:|:--:|

**OBSでクロマキー合成する方法**
Unityに慣れている人は「クロマキーでやらなくてもUnityでやれば良いのでは🤔」となりそうですが、これはこれで救われる命があるかもしれないので書き残しておきます

1. OBSの画面左下、ソースの＋ボタンを押してメディアソースを選択、グリーンバックで撮影した動画を追加する

|![023.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2698055/a0bcb40e-4022-ba90-b979-c175175b0eaf.png)|![024.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2698055/523adc0c-011d-d090-881a-b72da2f4b0d5.png)|
|:--:|:--:|

2.メディアソースを右クリックし、フィルタを選択する（左図）
3.フィルタの選択画面から左下の＋ボタンを押してクロマキーを追加する（中央図）
4.クロマキーの設定画面で、背景が透過されるように設定する（右図）
5.設定できたらウィンドウを閉じる

|![025.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2698055/437c1c1a-0928-af14-89d7-71237d0ec746.png)|![026.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2698055/72910118-62d7-3728-3642-2754768614c8.png)|![027.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2698055/088b6887-6b20-fb30-2a62-325a0abe4695.png)|
|:--:|:--:|:--:|

6.ソースの＋ボタンを押して画像を選択、背景にする画像を追加する（左図）
7.画像がメディアソースより下にくるようにドラッグ＆ドロップする（右図）
　※参考画像で背景として設定したのは知り合いのグラボが壊れたときのモニタ画面です（ちょうどいい画像がなかった）
**これでクロマキー合成動画の準備はOK**
|![028.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2698055/5e0d6fab-95af-32d1-9bee-e485b4360d3e.png)|![029.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2698055/a61bab4d-fb29-6cb9-1cd5-0c30addfd37b.png)|
|:--:|:--:|

8.設定から録画の設定を行う。出力先や品質、フォーマットなどはお好みで。（左図）
9.設定が終わったら、録画開始ボタンとメディアソースの再生ボタンを押して録画を行う（右図）
10.動画の再生が終わったら、録画を終了する
**あとは動画編集ソフトで音楽データと合わせたり、同様の手順で他のカメラアングルで作った動画と繋ぐなどして完成**

|![030.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2698055/5dbebaeb-4954-aa05-1d96-617d605732fd.png)|![31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2698055/135db643-71f4-35f5-73b1-a6976d4c61c8.png)|
|:--:|:--:|

おまけのおまけまで読んでいただきありがとうございます。
Unityをもっと使えるようになれば、色々とできることが増えそうなので今後も勉強していきます。