はじめに##
それでは本命といえるUnity上で実際に動くようにしていきたいと思います。こまめにセーブしていきましょう。
モーションキャプチャーについては取り扱いません。そのうち興味が出てやるようなことがあればまた書きますが現時点では自分で調べてがんばってください。(どうやらkinect2出るらしいけどやるかどうかはわかんない。)
では入れる必要がある(と思われる)アセットを紹介していきます。
UniVRM
VRM方式のものをUnityで扱うためのアセット。必須。これを書いている時のバージョンは0.51.0。
https://github.com/dwango/UniVRM/releases
OVRLipSync
声に合わせて唇を動かすためのアセット。
https://developer.oculus.com/downloads/package/oculus-lipsync-unity/
VRMLipSyncContextMorphTarget.cs
OVRLipSyncをVRMのBlendshapeに対応させるためのスクリプト。これだけは.unitypackegeではないのでスクリプトを直接入れてやります。作者はこちらです→http://teruaki-tsubokura.com/
https://github.com/TsubokuLab/VRMLipSyncContextMorphTarget
kumaS_Assets
僕が作ったアセット。いろいろ入っている。
https://github.com/kumachan0210/VTuber_env_package
これらをAssets → Import Package → Custom Package...から入れます。
身体を召喚##
モデルのインポートをしていきます。
VRM → uniVRM-〇.〇〇.〇 → Importから作ったモデルをインポートします。Blenderでいじる人もマテリアルがはがれてしまうので一度入れます。
このようにモデル用のフォルダをつくるといいです。複数のバージョン入れてるとどれがどれだったかわからなくなるので。
入った青い立方体(この青い立方体となったやつをprefabといいます。)をhierarchyに置いてやりましょう。

これで身体が置けました。
このままだと後姿を映すこととなるのでMain CameraのTransformのPositionのYを1.2に、Xを4.1に、RotationのYを180に、Field of Viewを27に設定します。
さらに再生画面の解像度設定をします。デフォルトのままでもいいですができるところまで画質を上げたいでしょう?

Gameタブを押してその下の左から二番目のところをクリックして開きます。そして+を押して解像度を追加します。
- Labelに名前を。
- TypeはFixed Resolutionに。
Width & Heightは解像度を入れます。
- FHDは1920, 1080
- 4Kは3840, 2160です。
それでは再生ボタンを押して動かしましょう。
…しかし動きません。しかも空中に浮いてて色々おかしいです。(ついでに後ろ髪も見えない…)
部屋を作る##
なんならゲームの世界を作ってもいいのですが簡単に。
先ほどと同じようにkumaS Assets のObjectsの中のPrefabsにあるBaked Mesh Floorをhierarchyに配置します。これで床ができました。
Baked Mesh Wallを同じように配置すると壁ができます。さらにShellも配置します。これだけです。
まあ僕が完成品を渡しているだけなんですけど…。なので作り方のほうも説明します。
Hierarchy内で右クリック→3D Object → Planeで板が生成されます。
そしてお絵かきソフト(僕はめんどくさいので3Dペイントを使ってます)で作ったファイル(.jpegが多いかな)を取り込みます。
Project内で右クリック→Import New Assets からファイルを選択すれば取り込めます。これ最初にやったAssetタブのやつと同じなのでどっち使ってもいいです。ただしこちらは指定の場所にインポートできる。
取り込んだ絵をさっき作ったPlaneにD&Dすれば完成。
位置とか角度はがんばって探してね。
動くようにする##
面倒です。
あ、すいません。本音出ました。
いや、実を言うと最低限動かすのは楽なんですけど僕が追加で作ったやつの設定が割と面倒です。ただ、これがあるのとないのとでは大違いなのでつけるのを推奨します。(といってもこの中の面倒なので。開発と比べたら無視できるレベルですけど。)
最低限動くようにする####
このようにD&Dでくっつけてやります。ここには書けなかったけどVRM→UniVRM→Scripts→BlendShape→Blinkerをアバターにくっつけてやるとまばたきするようになります。
- RigidbodyのConstraintsのFreeze RotationのX,Zにチェックを入れる。これをしないと倒れます。
- Capsule Colliderの値をこんな感じにします。この円柱で接触判定をとる。
- Humanoid Co(ry ~~これはべつにいじらなくてもいい。~~適度に歩くスピードとかを調整してやるといいです。
- About Random 待機姿勢と表情のランダムな遷移termが待機姿勢。数字が大きいほど間が長くなる。
これと同じように設定がんばってください。首も頭も同じ設定です。それぞれコードのほうにコメントで説明してあるけどこっちでも簡単に説明を。
- Anim_name 自由に動かしていいアニメーション状態を指定。
- Key_name どのキーで動かす/動かさないの切り替えをするか。
- Start 始まりの時に自由に動かせる状態で始まるか否か。
- Set_start_rot 初めの時のRotation。…ぶっちゃけ作らなくてもよかった。
- Max それぞれの軸の動かしていい範囲の最大値。
- Min それぞれの軸の動かしていい範囲の最小値。
このようにcull modeをOffにするとちゃんと見えるようになります。
これで最小限動くようになりました。使い方は、
- 前後左右移動はWASDか矢印で。
- マウス移動で頭が動く。
- Key_nameで設定したキーで動く/動かない切り替え。
- Rで正面を見直す。
- 左Alt + Key_nameで頭の向く方向をそこで固定/解除。
- (テンキーではないほうの)数字キーでそれぞれアニメーション再生。
といったところです。動かしてみましょう。
動きましたね。だけど物足りない。
(ここでカクカクしたり服が貫通したりするのはスペック不足です。後のほうに軽量化の方法を書きますのでそこまで我慢してください。…本当にスペックが足りなかったらごめんなさい。)
十分に動かせるようにする####
それでなにをするのか。目が動くようにする&腕を動くようにする&リップシンク。
それぞれのスクリプトをこのようにアタッチします。

そしてそれぞれの設定はこのようになります。
目
- Anim 参照するAnimator。図のようにD&Dすればいい。
- Anim_name 動いていいアニメーションの状態
- Key_name 動かす/動かさないの切り替えのキー
- Start 始まったときに動かせるかどうか
- Set_start_rot 初めの時のRotation。…ぶっちゃけ作らなくてもよかった。
- Max それぞれの軸の動かしていい範囲の最大値。
- Min それぞれの軸の動かしていい範囲の最小値。
- Cam_obj カメラ。Main CameraをD&Dすればいい。
- L_r 右目か左目か。
- Anim 参照するAnimator。図のようにD&Dすればいい。
- Anim_name 動いていいアニメーションの状態
- Key_name 動かす/動かさないの切り替えのキー
- Start 始まったときに動かせるかどうか
- Set_start_rot 初めの時のRotation。…ぶっちゃけ作らなくてもよかった。
- Max それぞれの軸の動かしていい範囲の最大値。
- Min それぞれの軸の動かしていい範囲の最小値。
- L_r 右腕か左腕か。
- Sec_key SHIFT押しながら切り替えるやつかどうか。
そしてリップシンクはhierarcheyで右クリック、Create Emptyで空のゲームオブジェクトを作ってこうします。
これでリップシンクができるようになったはずです。
もう一度動かしてみましょう。操作方法は先ほどとほぼ変わらないです。追加要素としては、
- Shift + 1で常にカメラ目線となります。Shift + 0で自由に目を動かせるようになります。
- 腕はホイールの操作でも動きます。
色の調整##
今更なんですが、VRoidでの色とUnity上での色となんか違うという人がいるかもしれません。
その原因は太陽光にあたるものかMToonの設定がずれているかの二択です。
太陽光にあたるものはDirectional Lightといいます。ここで設定を変える必要があるのは、ColorとIntensityです。それぞれ意味はそのままです。わからなかったら辞書を引いてください。
ただ、僕は軽量化のために無効化したのでこっちの設定はスペックに余裕のある人向け。(スペックに余裕があるかどうか調べるのは次に書きます。)
軽量化##
でき上ったものなのですが、それなりに重いです。
どれぐらい重いか調べるにはWindow → Analysis → Profilerをクリックし、さらにAdd ProfilerでGPUを選択します。その状態で再生すると処理にどれだけ時間がかかっているか表示してくれます。
見てもらうとわかる通りOpaque, Shadows/depth, Renderingが重めです。ということでこれらを軽くしていきます。
これらは一体何か。それは光です。(詳しくは違います。雑でごめんなさい)ということでDirectional lightを無効化してやります。
チェックを外してやるだけ。

…。床とか壁とかは大丈夫ですが、アバターが真っ黒になっちゃいました。考えてみれば当然で光が無ければ暗くなります。
じゃあなぜ床とか壁とか大丈夫なのか。実はこれらは光を発するように僕が設定していたからなんですよね。ということでそのやり方を説明していきます。
まず、設定を変える必要があるのはここにあります。(青で囲ってあるところ)
青で囲ったところを押してその中から赤で囲ったところにあるやつと同じものを探し出します。そしてその隣のHDRと書かれているところをクリックし、RGBそれぞれ195ぐらいにして、Intensityを0.5前後で調整する(中には色がおかしくなるやつがあるのでそれは目指している色に設定)とよくなります。
それではどれぐらい軽量化されたか見ていきましょう。
・
・
・
多少軽くなりました。
最後に##
これで動くものができました。あと最後に一仕事。このままじゃ使えないので。
File → Build Settings... をクリックする。
Target Platformが間違っていないことを確認しBuildを押す。これで.exeファイルとして出力されます。
お疲れさまでした。次はBlenderでアニメーションを作るです。
おまけ##
僕はやらないのですが配信をするためOBS等を使うから背景をとある色にしたいという場合があると思います。そのときは背景を消してMain CameraのClear FragsをSolid Colorにして、Backgroundを目的の色にしてやるとできます。