UnityでVRoidのブレンドシェイプや赤面をキー入力で切り替えるスクリプトを動かしたのでメモ

Unity

 

■PR■

現在、ファンタジーゲーム制作に使える人気unityアセットが50%オフで買える unityファンタスティックファンタジーセールをやってるみたいです。

unityファンタスティックファンタジーセール 50%オフ

欲しいアセットはこの機会に買っておくと良いかも。

 
 

 

 

参考にした頭のいい先輩のページ

とても参考になりました。

ありがとうございます(*^-^*)

Unity勉強日誌~ブレンドシェイプ操作方法その① - Qiita
はじめに。ゲーム作ってみたいな~と思い、つい先日からUnityをさわり始めましたHITOMI2236です。今回ブレンドシェイプについて調べたのでここに記録しようと思います。個人用のメモですが、もし同じところで迷っている人がいた...

書き換えた部分

Unity勉強日誌~ブレンドシェイプ操作方法その① - Qiita
はじめに。ゲーム作ってみたいな~と思い、つい先日からUnityをさわり始めましたHITOMI2236です。今回ブレンドシェイプについて調べたのでここに記録しようと思います。個人用のメモですが、もし同じところで迷っている人がいた...

こちらの先輩のコードをそのままコピペして、モデル名とブレンドシェイプ名だけ書き換えたら動いた。

書き換えたのはここだけ。

    void Start() {
 
        m_weight = 0;
        head = GameObject.Find("Mayumi/Face.baked");
        skinnedMeshRenderer = head.GetComponent<SkinnedMeshRenderer>();
        m_Index = skinnedMeshRenderer.sharedMesh.GetBlendShapeIndex("Face.M_F00_000_00_Fcl_ALL_Angry");
    }

さすがにこれでコード引用すると、ほぼまるまるコピペになって先輩に迷惑がかかるので( ̄▽ ̄;)コードは↑の先輩のページを参照してください。

 

表情のブレンドシェイプが設定されてる、MayumiオブジェクトのFace.bakedを指定。

Face.M_F00_000_00_Fcl_ALL_Angry はVRoidの怒ってる表情のやつ。ここを変えれば笑顔や驚いた顔にしたりできます。

使い方は、モデルにアタッチするだけでOK

スクリプトでheadやスキンメッシュレンダラーが指定してあれば、ここは「なし」のままでも動いた。

 

これでキー入力で怒った表情にすることに成功!

最初にやった時は、ブレンドシェイプ名の指定を間違えて動かなかった( ̄▽ ̄;)

それに気付いたのはこのページ。

Unityにて設定した表情(BlendShape)を、任意のキーボード入力で切り替えたい
Unityにて設定した表情を、任意のキーボード入力によって切り替える処理について皆さまの知見からご教示賜りたく質問させていただきました。 以下、詳細です。 **開発環境** ・Unity 2

 

この質問も、qiitaの同じ先輩のページを参考にしたコードみたいなんだけど、そこで回答してくれていた別の頭のいい先輩がブレンドシェイプ名をコンソール出力するコードを書いてくれてたから(ありがとうございます!)、それをコードに足して動かしてみたらエラーの原因がわかった。

最初に間違えたのは、ALLのLが小文字のlになってたことが原因でした(;^_^A

手打ちでやると間違うから、これはコピペしたほうがいいね。

VRoidのFace.bakedに設定されてるブレンドシェイプメモ


2021/12/19追記:

VRoidStudioがバージョンアップしたことに伴って、ブレンドシェイプ名が変わっているかも?

VRoid Studio正式版(v1.0.0)がリリースされた!メガネやケモミミも追加されて良い感じ
バーチャル3Dクリエイター神部まゆみです(*^-^*) 2021/10/31にVRoid Studioの正式版(v1.0.0)がリリースされたみたいだからいじってみたよ。 2022/11/07追記: 2022/11/07現...

よく見てないから分からないけど、チラッと見た時変わってた気がする。

後で時間があれば書き換えますが、すぐ必要な人はちゃんとunityでVRoidのブレンドシェイプ名見て書いたほうがいいかも(;^_^A


 

せっかくコンソール出力したのでメモしておく。

 

Face.M_F00_000_00_Fcl_ALL_Angry

Face.M_F00_000_00_Fcl_ALL_Fun

Face.M_F00_000_00_Fcl_ALL_Joy

Face.M_F00_000_00_Fcl_ALL_Sorrow

Face.M_F00_000_00_Fcl_ALL_Surprised

Face.M_F00_000_00_Fcl_BRW_Angry

Face.M_F00_000_00_Fcl_BRW_Fun

Face.M_F00_000_00_Fcl_BRW_Joy

Face.M_F00_000_00_Fcl_BRW_Sorrow

Face.M_F00_000_00_Fcl_BRW_Surprised

Face.M_F00_000_00_Fcl_EYE_Natural

Face.M_F00_000_00_Fcl_EYE_Angry

Face.M_F00_000_00_Fcl_EYE_Close

Face.M_F00_000_00_Fcl_EYE_Close_R

Face.M_F00_000_00_Fcl_EYE_Close_L

Face.M_F00_000_00_Fcl_EYE_Joy

Face.M_F00_000_00_Fcl_EYE_Joy_R

Face.M_F00_000_00_Fcl_EYE_Joy_L

Face.M_F00_000_00_Fcl_EYE_Sorrow

Face.M_F00_000_00_Fcl_EYE_Surprised

Face.M_F00_000_00_Fcl_EYE_Extra

Face.M_F00_000_00_Fcl_MTH_Up

Face.M_F00_000_00_Fcl_MTH_Down

Face.M_F00_000_00_Fcl_MTH_Angry

Face.M_F00_000_00_Fcl_MTH_Neutral

Face.M_F00_000_00_Fcl_MTH_Fun

Face.M_F00_000_00_Fcl_MTH_Joy

Face.M_F00_000_00_Fcl_MTH_Sorrow

Face.M_F00_000_00_Fcl_MTH_Surprised

Face.M_F00_000_00_Fcl_MTH_A

Face.M_F00_000_00_Fcl_MTH_I

Face.M_F00_000_00_Fcl_MTH_U

Face.M_F00_000_00_Fcl_MTH_E

Face.M_F00_000_00_Fcl_MTH_O

Face.M_F00_000_00_Fcl_HA_Fung1

Face.M_F00_000_00_Fcl_HA_Fung1_Low

Face.M_F00_000_00_Fcl_HA_Fung1_Up

Face.M_F00_000_00_Fcl_HA_Fung2

Face.M_F00_000_00_Fcl_HA_Fung2_Low

Face.M_F00_000_00_Fcl_HA_Fung2_Up

EyeExtra_01.M_F00_000_00_EyeExtra_On

 

説明は省略。

太字のは、個人的に使用頻度が高いやつ。

Face以外にも、独自にBlenderとかで設定したシェイプキーもいじれるっぽい

というかシェイプキー(ブレンドシェイプ)があるオブジェクトには、自動でSkinnedMeshRendererがつくみたい?

これは以前作ったシェイプキー付の赤面オブジェクトだけど、インポートしたら自動でSkinnedMeshRendererコンポーネントが付いてるね。

 

これならキー入力で、仕込んでおいた赤面とか涙をコントロールできそう。

ていうかブレンドシェイプなら全部操作できるか。

Headボーンの子にして仕込んだ赤面オブジェクトを、前に出すブレンドシェイプを使って赤面させることに成功

 

この赤面オブジェクトは、シェイプキー付でBOOTHにアップしてあるよ( *´艸`)

Unity用赤面オブジェクト 顔内部に仕込んでシェイプキーで表面に出せる - まゆみマート - BOOTH
Unityで使える赤面オブジェクトです。VRChatでも動作確認済み。 ■中身 fbx、blend、obj、daeファイルを入れてあります。テクスチャファイルのgimpデータも入れてあります。 blend、fbxファイルはシェイプキーで上下左右と前後に動かせるので、顔の内部に仕込んでおいてシェイプキーで赤面させられます...

 

Headボーンの階層が結構深部にあるので、パス指定がめんどくさいですが( ̄▽ ̄;)

先輩のコードを書き換えたのはここ。

    void Start() {
        m_weight = 0;
        head = GameObject.Find("Mayumi/Root/J_Bip_C_Hips/J_Bip_C_Spine/J_Bip_C_Chest/J_Bip_C_UpperChest/J_Bip_C_Neck/J_Bip_C_Head/Hoho");
        skinnedMeshRenderer = head.GetComponent<SkinnedMeshRenderer>();
        m_Index = skinnedMeshRenderer.sharedMesh.GetBlendShapeIndex("Front");
    }

 

涙とか舌のオブジェクトもHeadの子にして追従させるから、使う時はHohoの部分だけ書き換えればいいと思う。

おわりに

ブレンドシェイプは、VeryAnimationとかで手打ちで操作してもいいけど、キー入力で操作できるならアニメーションの作り方も変わってきそう。

EasyMotionRecorderとかのアセット使えば動きもブレンドシェイプもモーション記録できるから、ざっくりした動きだけVeryAnimationで作って、ブレンドシェイプ操作したりLookAnimatorとかで首や上半身とかを操作しながらモーション録画してアニメーション作っていったほうが楽かも?

全部手打ちでアニメーション作るのってすごい大変だし(-_-;)

まぁやり方次第だね。

 

同じところで詰まってる人は参考にしてね。

 

タイトルとURLをコピーしました