こんにちは、エンジニアのオオバです。

お悩みさん
お悩みさん
  • VRoidStudioで作成したVRMの表情をUnity上で切り替えたい
  • VRMに表情切り替え項目が無い?
  • オオバ
    オオバ
    本記事ではこれらの悩みを解決します。

    せっかく作ったキャラの表情は豊かであってほしいですよね。今回は以前↓こちらの記事で紹介したUnityエディタに取り込んだVRMキャラの表情を切り替える方法を解説していきます。

    まだVR開発に興味はあるけどまだVRMを用意していないという方は↑の記事を参考に進めてみてください。

    【注意】本記事では VRM-1.0 のファイルフォーマットで進めていきます。VRMのファイルフォーマットとはVRoid Studioからエクスポートする際の設定です。0系と1.0系の2択があります。本記事ではより新しい方のVRM-1.0を使用するということです。

    VRM-0系とは仕様が変わっているためご注意ください。

    VRMのブレンドシェイプで表情変更

    はじめに結論を簡単にまとめます。

    VRMのブレンドシェイプで表情変更する

    ①インポートしたVRMからブレンドシェイプ作成

    ②表情変更用のスクリプト作成

    ③VRMにスクリプトをAddComponent

    ④ランタイムで表情変更

    この4つのステップで表情切り替えが可能です。今回迷いやすいのは表情切り替えの肝であるブレンドシェイプデータが初期状態だと存在しないということです。

    本記事では迷いやすい部分を分かりやすく具体的に解説していきますので、ぜひ最後まで読んでみてください。

    ※本記事は広告を含みます

    👉DOTweenの教科書を読んでUnityアニメーションをプログラミングしてみよう!

    ①VRMからブレンドシェイプデータの作成

    最初にやるべきことはUnityエディタに取り込んだVRMからブレンドシェイプの作成です。UnityエディタにVRMを取り込んだ時点ではブレンドシェイプを操作するファイルは作成されません。

    Projectウィンドウ内にあるVRMファイルを選択し、Inspectorウィンドウを確認してみましょう。

    Unity上でVRMキャラの表情を切り替える方法【VRM-1.0版】_0

    ①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に作成したスクリプトをセットしていきます。

    Unity上でVRMキャラの表情を切り替える方法【VRM-1.0版】_1

    Hierarchyウィンドウ内の ①VRM を選択して ②AddComponent③VRMInstanceをVRMにセット しておいてください。

    ④ランタイムでVRMの表情変更確認

    最後にUnityエディタを実行してVRMの表情を変更を確認していきます。ただし今回作成したスクリプトは自動で表情変更しません。Inspectorウィンドウからパラメータを手作業で変更する必要があるので注意です。

    Unity上でVRMキャラの表情を切り替える方法【VRM-1.0版】_2

    Presetから表情を選んでValueを調整してみてください。

    Unity上でVRMキャラの表情を切り替える方法【VRM-1.0版】_3

    こんな感じで表情変更が可能です。

    今回はあくまでテスト用として表情を手動で切り替えましたが、このコードを元にイベント発生時に表情を切り替えるといった拡張ができそうですね。

    まとめ

    今回はVRMの表情をランタイムで切り替える方法について解説していきました。

    最後に簡単にまとめます。

    最後に記事の内容を簡単にまとめます。

    VRMの表情変更はブレンドシェイプ

    ①VRM1.0のブレンドシェイプは初期状態は非表示

    ②表情切り替えにはスクリプトを利用

    ③表情切り替えはUnity実行中で確認

    こんな感じです。

    Unity上でVRMキャラの表情を切り替える方法【VRM-1.0版】_4

    キャラの表情が変わると一気に生きてる感が出てきますよね。前述したイベントをキャラにどんどん仕込んでいってより生き生き状態にしていこうと思います。その間に手に入った情報は可能な限りシェアしていくのでぜひXアカウントなどをフォローしておいてください。

    Unity上でVRMキャラの表情を切り替える方法【VRM-1.0版】_5

    もう一歩踏み込むと、例えば瞳の瞬き表現もこんな感じでブレンドシェイプで簡単に実装できます。ぜひ挑戦してみてください。

    「Unity初心者大学」というUnity初心者向けのYouTube始めました!!
    ぜひチャンネル登録をお願いします!

    最後まで読んでいただきありがとうございました!
    すばらしいVRMライフをお過ごしください。

    オススメ記事
    検証環境