[MMD to Unity] YYB式初音ミクをUnityで動かそう [Unity 2022.3.19]

# はじめに

こんにちは
[前回の記事](https://qiita.com/Zect/items/ec2bb9aef65bf2555e29)の続編となります。

この記事では、UnityでMMDモデルに躍らせる方法を解説していきます。
ただ、これは非技術者にもわかりやすいように書いてるので、ある程度理解してる人は流し読みでもダイジョブです。

前回と同様、この記事では`三目YYB`作の`YYB Hatsune Miku_default`を使用します。

https://bowlroll.net/file/284016

モーションは、後でも説明しますが、`グレイ`作の`女の子がクルクル回るモーション`を使用します。

https://bowlroll.net/file/195514

# Unityにミクを表示する

https://qiita.com/Zect/items/ec2bb9aef65bf2555e29

この記事を終わらせると、こんな感じになってるはずです。
あ、モデルとカメラの位置は自由にいじってもろて（）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/974385/7782e0c5-ea38-4295-d9bd-93d86352a6c7.png)

さて、それでは、ミクに踊らせる準備をしましょう。

# ボーンを生成する

（言い方あってるかな...）
まぁ、この工程が無いと踊れないのであってるでしょう。

ボーンを生成します。

それでは、かつてピンク色になってたミクノファイルを探しに行きます。
ミクノファイルが見つかったら選択しましょう。
そうすると、右上にこんな表記が、、、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/974385/f559fd43-8b4b-7296-176b-ff102782c349.png)

ここで`Rig`を選択してください。
そうしたら、一番上の`Animation Type`を`Humanoid`にします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/974385/91fe438a-bac2-5184-f3a9-9a46d863871e.png)

表示が変わると思いますが、完全に無視して`Apply`ボタンを押します。
ちょっと待ちます。

あ、なんかピンク色になった
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/974385/62d9226e-b395-ff62-9f74-270e0a07b8ac.png)

これは、原因不明ですが、適用されてるシェーダーが勝手に切り替わるからです。
なんで、マテリアルフォルダの中に入り、前回やったのと同じように、URPのLitにシェーダーを変更します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/974385/26f8a849-179b-0a43-032b-a07764b160c9.png)

それでもピンクの場合がありますが、`ctrl + s`でセーブしてやると色が戻ります。

それでは、ボーンがちゃんと生成されたか見に行きましょう

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/974385/2a9cebd1-7591-fcdc-ae7e-df24cf346470.png)
ここの`Configure`ボタンを押すと表示が変わります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/974385/987d8707-0b22-6beb-0914-fb108c95b288.png)

僕自身、あんま理解してないので細かい解説はできませんが、ここでボーンが不自然だったりすると、右に居る人の一部が赤くなったりします。
そうしたら、名前が一致するボーンを左の一覧から探してドラッグアンドドロップで追加する、みたいな感じです。

ただ、ここで使用しているMMD4Mecanimは、そこら辺が優秀なんです。
本当は、Blenderで変換してここに持ってくる方法もありますが、それだとボーンがハチャメチャになって修正が面倒です。

てことで、気が済むまでボーンを眺めたら、右の、人がたってる部分を下の方までスクロールすると`Done`ボタンがあるのでクリックします。
これで、ミクの踊る準備ができました。

次は、モーションを持ってきます。

# MMDモーションを用意する

今回は、ダンスモーションではなく、`グレイ`作の`女の子がクルクル回るモーション`を使用します。
解釈違い？
知らん。

https://bowlroll.net/file/195514

ダウンロードをし、解凍します。

# MMDモーションの変換

モーションの変換のために、再度ミクの変換処理をする必要があるので、[前回の記事の **MMDモデルを準備する** ](https://qiita.com/Zect/items/ec2bb9aef65bf2555e29#mmd%E3%83%A2%E3%83%87%E3%83%AB%E3%82%92%E6%BA%96%E5%82%99%E3%81%99%E3%82%8B)を参考に、Assets直下に`Miku 2`などの名前のフォルダを作成し、`Texture`フォルダと`pmx`ファイルを入れてください。

あと、さっきダウンロードした`女の子がクルクル回るモーション`の`クルクル1周_ラスト左肘曲げ.vmd`も入れます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/974385/fc43c1e8-77ea-5c19-051f-4dd883f675db.png)
勝手に生成された、なんかかっこいいアイコンを選択して、規約に同意すると右に`vmd`と書いてある項目が出てくるので、そこにvmdのモーションファイルを入れます。

`Process`を押して待ちます。

# Timelineの準備

ここからの方法は人によって分かれますが、後でモーションの修正をしたいので、`Timeline`を使用する方法を解説します。

さて、変換処理が終わると、こんな感じになってると思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/974385/aca517f7-9b9f-2115-5438-9e75b4fa02d0.png)
この画像上で選択してるファイルがモーションのファイルです。

ただ、変換したままだとうまく動かないので、少し処理をします。

<a href="#ボーンを生成する">ボーンを生成する</a> と同様に、この新しく作成したミクのボーンを生成します。
（RigのAnimation TypeをHumanoidにします。）

Humanoidになったら、モーションを選択し、`ctrl + d`で複製します。

次に、Assetsへ戻り、Assetsの何もない場所を右クリック、createから`Timeline`を作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/974385/cedda20d-866b-a401-4fca-85023c1ae41e.png)
この、映画のフィルムアイコンです。
これをダブルクリックすると、Timelineタブが開かれます。

# モデルにモーションをアサイン

次に、左の`Hierarchy`の何もない部分を右クリックし、`Create Empty`で空オブジェクトを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/974385/24adbd99-e9f2-36d7-30d2-007d5910fa5c.png)
そうしたら、作成した空objの上にさっき作成したtimelineファイルを落とします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/974385/dec0d119-d083-826b-d60a-99264af33f52.png)
そうすると、右に`Playable Director`コンポーネントが表示され、真ん中はこんな感じでなんかtimelineっぽい表示になるはずです。

そうしたら、`＋ > アニメーショントラック`で項目を作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/974385/68d73e71-e4f8-f787-f802-e1532a00403d.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/974385/26809565-2d7c-be3a-17d1-7bf8fddf611d.png)
こんなのが作成されるはずです。

それで、この何かが入りそうな`None`と書かれた部分に左のHierarchyにあるミクを`None`の部分に落とします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/974385/1b137d02-d103-40cc-fbff-a65e33bbd94d.png)
で、この数字が書いてある部分に、前に複製したモーションファイルを落とします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/974385/5c0f53dd-294f-b247-60fb-e0cbae14c147.png)
こうなる。

それで、できた箱をダブルクリックします。
点が沢山あるこれがアニメーションアニメ編集画面ですー。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/974385/a573a23c-2f8a-ffc6-555a-330709b12a17.png)

Sceneタブを開き、Animationタブの再生ボタン「▶」をクリックすると、アニメーションが再生されます。

# モーションのループ再生

timelineをアサインしたobjのInspectorの`Wrap Mode`を`Loop`にすると、ループ再生されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/974385/e127d252-42f9-13e3-e6e8-484ccb70a5b4.png)
ここです。

# モーションの修正

アニメーションタブを開くと沢山項目があると思います。
その、数字が書かれてる部分のちょっと左にカーソルを持って行くと、左右に振れそうなアイコンに変わります。
これを動かすと数値が変わり、動きを編集できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/974385/cf614b98-bdca-790b-fbdd-87a561678712.png)
手順通りに進めて、環境がほぼ同じなら、こんな感じで、腕に新たな関節ができてる不自然な状態だと思います。
これは、操作可能な部分が腕に2つあり、挿入したモーションは、その片方にしか適用されてないことによって起こる不具合です。
具体的には、`66.!joint_LeftArm`, `24.!joint_RightArm`にはモーションが割り当てられてますが、`71.joint_LeftArmM`, `29.joint_RightArmM`には無いのでこうなってます。

それでは、編集していきましょう。

アニメーション窓を一番下までスクロールし、`Add Property`を押します。
出てくる窓から、
`461 > 13 > 11 > 12 > 22 > 29 > Transform > Rotation`
と
`461 > 13 > 11 > 12 > 64 > 71 > Transform > Rotation`
から、RightArmMとLeftArmMのRotationをそれぞれ追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/974385/e3559a3a-488c-070d-244a-3e6271c26683.png)
そしたら、腕が自然になるように修正します。

出来た映像がこちら

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

# 物理エンジン On

モーションにアサインしたミクを選択し、右に表示される窓の下の方にある`MMD4 Mecanim Model (Script)`の`Physics`タブを選択し、一番上の`Physics Engine`を`Bullet Physics`にします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/974385/18026c8f-b354-0abe-4858-78564ea352ba.png)

それで再生すると、物理エンジンが適用されます。

# 最後に
MMDモデルをUnity上で動かす話をしてきました。

まだまだ理解して切れてない部分が多いので、改善点あればコメントしていただけると非常に助かります。

# 宣伝
クラブのVJやってます。
「中高生・初めましてに優しいボカクラ」Hello, Vocaloid、通称`ハロボカ`が毎月第三日曜に新宿で開催してます。
大きい音で有名ボカロが聞けます。

https://twitter.com/HELLO_Tempest39

終了。

では、また ﾉｼ