こんにちは、エンジニアのオオバです。
せっかく作ったキャラの表情は豊かであってほしいですよね。今回は以前↓こちらの記事で紹介したUnityエディタに取り込んだVRMキャラの表情を切り替える方法を解説していきます。
まだVR開発に興味はあるけどまだVRMを用意していないという方は↑の記事を参考に進めてみてください。
【注意】本記事では VRM-1.0 のファイルフォーマットで進めていきます。VRMのファイルフォーマットとはVRoid Studioからエクスポートする際の設定です。0系と1.0系の2択があります。本記事ではより新しい方のVRM-1.0を使用するということです。
VRM-0系とは仕様が変わっているためご注意ください。
VRMのブレンドシェイプで表情変更
はじめに結論を簡単にまとめます。
①インポートしたVRMからブレンドシェイプ作成
②表情変更用のスクリプト作成
③VRMにスクリプトをAddComponent
④ランタイムで表情変更
この4つのステップで表情切り替えが可能です。今回迷いやすいのは表情切り替えの肝であるブレンドシェイプデータが初期状態だと存在しないということです。
本記事では迷いやすい部分を分かりやすく具体的に解説していきますので、ぜひ最後まで読んでみてください。
👉DOTweenの教科書を読んでUnityアニメーションをプログラミングしてみよう!
①VRMからブレンドシェイプデータの作成
最初にやるべきことはUnityエディタに取り込んだVRMからブレンドシェイプの作成です。UnityエディタにVRMを取り込んだ時点ではブレンドシェイプを操作するファイルは作成されません。
Projectウィンドウ内にあるVRMファイルを選択し、Inspectorウィンドウを確認してみましょう。
①VRMタブ
を選択して ②Extract Meta And Expression...
ボタンをクリックしてみてください。
するとProjectウィンドウに VRMファイル名.vrm1.Assets
というフォルダが作成されます。この中にブレンドシェイプのデータが作成されました。
以上でブレンドシェイプデータの作成は完了です。
②VRM表情変更用のスクリプト作成
次にVRMの表情を切り替えるためのスクリプトを用意します。行数が少ないため丸ごとコードを紹介します。
using UnityEngine;
using UniVRM10;
public class ExpressionController : MonoBehaviour
{
[SerializeField] private Vrm10Instance _vrm;
private Vrm10RuntimeExpression _expression;
public ExpressionPreset preset;
[Range(0, 1f)] public float _value;
void Awake()
{
_expression = _vrm.Runtime.Expression;
}
void Update()
{
_expression.SetWeight(ExpressionKey.CreateFromPreset(preset), _value);
}
}
このコードを作成したC#スクリプトにコピペしましょう。
③VRMにスクリプトをAddComponent
次にVRMに作成したスクリプトをセットしていきます。
Hierarchyウィンドウ内の ①VRM
を選択して ②AddComponent
し ③VRMInstanceをVRMにセット
しておいてください。
④ランタイムでVRMの表情変更確認
最後にUnityエディタを実行してVRMの表情を変更を確認していきます。ただし今回作成したスクリプトは自動で表情変更しません。Inspectorウィンドウからパラメータを手作業で変更する必要があるので注意です。
Presetから表情を選んでValueを調整してみてください。
こんな感じで表情変更が可能です。
今回はあくまでテスト用として表情を手動で切り替えましたが、このコードを元にイベント発生時に表情を切り替えるといった拡張ができそうですね。
まとめ
今回はVRMの表情をランタイムで切り替える方法について解説していきました。
最後に簡単にまとめます。
最後に記事の内容を簡単にまとめます。
①VRM1.0のブレンドシェイプは初期状態は非表示
②表情切り替えにはスクリプトを利用
③表情切り替えはUnity実行中で確認
こんな感じです。
キャラの表情が変わると一気に生きてる感が出てきますよね。前述したイベントをキャラにどんどん仕込んでいってより生き生き状態にしていこうと思います。その間に手に入った情報は可能な限りシェアしていくのでぜひXアカウントなどをフォローしておいてください。
もう一歩踏み込むと、例えば瞳の瞬き表現もこんな感じでブレンドシェイプで簡単に実装できます。ぜひ挑戦してみてください。
この記事が気に入ったらフォローしよう
「Unity初心者大学」というUnity初心者向けのYouTube始めました!!
ぜひチャンネル登録をお願いします!
最後まで読んでいただきありがとうございました!
すばらしいVRMライフをお過ごしください。
- Unity6000.0.23f1
- VRM-1.0