見出し画像

FaceEmo使用時にPhysBoneをトリガーとして表情を変える方法

※注
FaceEmo使用時に、PhysBoneをトリガーとして表情を変える方法について
悩んで、最終的に解決できたので忘備録として残しておきます!
よろしければどうぞ!


はじめに

私は表情の改変にはFaceEmoを使用しているのですが
FaceEmo使用時にPhysBoneを掴んだ時に表情を変える方法が調べてみても
すぐに見つけられなかったため、後々同じような改変をしたい方のために
参考になれば!と思って記事を書いています!( •̀ ω •́ )✧

後々、応用が効くようにサンプルの仕組みについて触れつつ
実装方法について書いていきたいと思います!
同じような悩みを持っている方のヒントになれば幸いです!


情報を調べる

では、さっそくはじめていきましょう!(๑•̀ㅂ•́)و✧

ツールを使って改変する場合は、通常の手順でうまくいかない場合が
多いので、まずFaceEmoの公式マニュアルで似たような記述がないか
探してみます!

すると、撫でられた時に表情を変える方法の記述が見つかりました!

この方法を応用して、実現できないかを検証していきます!


公式サンプルの確認

撫でられたときの表情を設定する」のページによると、
そのためのprefabがあるようなので作ってみます!

Projectビューのどこでも良いのですが
Assets->Suzuryg->FaceEmoの場所で右クリックし
Create->FaceEmo_EmoteOverrideExampleをクリックします!

prefabを作成

すると、prefabとAnimator Controllerができます!

できた!

prefabの確認

prefabをFaceEmoPrefabの中にドラッグ&ドロップして
仕組みを細かく見ていきましょう!

調査開始!

まず、FaceEmo_EmoteOverrideExampleをみると
MA Bone ProxyMA Merge Animatorがついていることがわかります!

ふむふむ…

MA Bone Proxyは
ターゲット:Head
配置モード:子として・ルートに配置
と設定されているので、頭の位置に配置され、頭に追従にすることが
わかります!

頭を撫でられたときの表情を変更する機能なので
頭の位置に配置され、頭に追従する設定なワケですね

で、次にMA Merge Animatorですが
FaceEmo_EmoteOverrideExampleのAnimator Controllerを
FXレイヤーに追加する設定ですね

このAnimator Controllerはあとで見ることにして
先にCNST_TOUCH_NADENADE_POINTを見ていきましょう!

なるほど…!

VRC Contact Receiverがついていますね!

これはVRC Contact Sender(送信側)VRC Contact Receiver(受信側)
触れた時にパラメータの値を変化させる機能で

Shape: Sphere
Radius: 0.08
Filtering: Allow Others
Collision Tags: FingerL, FingerR
Receiver Type: Constant
Parameter: CNST_TOUCH_NADENADE_POINT
と設定されているので

半径0.08の球状のコライダに、他者の左か右の指が
接触している間、CNST_TOUCH_NADENADE_POINTの値を
変化させるという意味になります!

ここで、誰かに撫でられているという判定をしているようですね!
ということは、Animator Controllerで変化させた値を使って
何かをしているはず!ということで見ていきましょう!


Animator Controllerの確認

パラメータを確認すると、さきほどVRC Contact Receiverで判定した
CNST_TOUCH_NADENADE_POINTがありました!

見つけた…!

IDLEからACTIVEに向かう矢印を見てみると
CNST_TOUCH_NADENADE_POINTがtrueの時
つまり、頭が撫でれられている時にACTIVEに移行することがわかります!

判定結果が使われている

次に、ACTIVEをダブルクリックすると
NadeNadeで、撫でられた時に変更したい顔のアニメーションが
設定されており

顔のアニメーションが設定されている

NadeNadeからExitに向かう矢印で
CNST_TOUCH_NADENADE_POINTがfalseの時
つまり、手が頭から離れた時にもとの顔に戻る
という動きになっていることがわかります!

撫でるのをやめたらもとに戻る

と、全体の仕組みがわかったところで
この仕組みを改造して、Physboneが掴まれた場合に
表情が変更されるような機能を作っていこうとおもいます!


実装

それでは、作っていきましょう!(๑•̀ㅂ•́)و✧
今回は、「帽子を掴まれた時に表情を変更する」が目的です!


帽子のPhysBoneの設定

帽子のVRC Phys Boneの下の方にあるOptionsを開きます!
そして、Is AnimatedにチェックをつけるとParameterが表示されます!

このParameterには、わかりやすい名前を設定します!
私は「ChocoHat」にしました!

PhysBoneの設定を変更

拡大してみるとParameterの下に色々と表示されています!

なるほど

これは、Animator Controller内で同じ名前のパラメータを設定すれば
今のPhysBoneの状態から値を取得できるというもので

それぞれ
ChocoHat_IsGrabbed:掴まれていたらtrue、そうでないならfalse
ChocoHat_IsPosed:固定されていたらtrue、そうでないならfalse
ChocoHat_Angle:Angle値を0~1の範囲で取得
ChocoHat_Stretch:Strech値を0~1の範囲で取得
ChocoHat_Squish:Squish値を0~1の範囲で取得

今回は掴まれているかを判定したいので
使うのはChocoHat_IsGrabbedになりますね!


prefabの編集

では、prefabを目的にあわせて編集していきます!

MA Bone ProxyはVRC Contact Receiverを
頭に追従させることが目的で、今回の目的には関係しないので削除します!

MA Bone Proxyを削除!

また、このprefabの子オブジェクトになっているCNST_TOUCH_NADENADE_POINTも、今回の目的には関係ないので
削除します!


Animator Controllerの編集

パラメータにあるCNST_TOUCH_NADENADE_POINTは不要なので削除!
そして、ChocoHat_IsGrabbedを追加します!

パラメータ編集!

そして、IDLEからACTIVEに向かう矢印で
CNST_TOUCH_NADENADE_POINTがtrueという条件を削除!
ChocoHat_IsGrabbedがtrueという条件を追加します!

条件を変更!

そして、ACTIVEをダブルクリックし
NadeNadeに好きな表情アニメーションに変更します!

恐ろしい子!

私は帽子を掴まれた時に、この表情にしようと思うので
この顔を設定します!

恐ろしい子.anim

そして、NadeNadeからExitに向かう矢印で
CNST_TOUCH_NADENADE_POINTがfalseという条件を削除!ChocoHat_IsGrabbedがfalseという条件を追加します!

条件を変更!

Gesture Mangerを起動して動作を確認してみます!
Gameビューで帽子にカーソルを持っていって
クリックして引っ張ってみます!

ギャー!

やりました!( •̀ ω •́ )✧
これで「帽子を掴まれた時に表情を変更する」が実現できました!

もし、うまくいかない場合はPhysboneのParameterと
Animator ControllerのParameterの名前を確認してみてください!
名前が違っていると動かないので注意です!


おわりに

細かく説明していたら、けっこう長くなってしまいましたが
大丈夫でしたでしょうか?o((>ω< ))o

他の方が作ったアセットでも、こんな感じに設定内容を見ながら
応用してみると、やれることが広がって楽しいですし
最初から自作するよりもハードルが低かったりします!

特にPhysBoneやContactsを使ったギミックは
Exメニューを開かずに動作させることができて
直感的でとても楽しいです!( •̀ ω •́ )y

もし、興味のある方はいろいろいじって
遊んでみてくださいね!
それでは!

いいなと思ったら応援しよう!