![見出し画像](https://assets.st-note.com/production/uploads/images/174308300/rectangle_large_type_2_0ad7eee25ae8dce345b10a77c66efa30.png?width=1200)
FaceEmo使用時にPhysBoneをトリガーとして表情を変える方法
※注
FaceEmo使用時に、PhysBoneをトリガーとして表情を変える方法について
悩んで、最終的に解決できたので忘備録として残しておきます!
よろしければどうぞ!
はじめに
私は表情の改変にはFaceEmoを使用しているのですが
FaceEmo使用時にPhysBoneを掴んだ時に表情を変える方法が調べてみても
すぐに見つけられなかったため、後々同じような改変をしたい方のために
参考になれば!と思って記事を書いています!( •̀ ω •́ )✧
後々、応用が効くようにサンプルの仕組みについて触れつつ
実装方法について書いていきたいと思います!
同じような悩みを持っている方のヒントになれば幸いです!
情報を調べる
では、さっそくはじめていきましょう!(๑•̀ㅂ•́)و✧
ツールを使って改変する場合は、通常の手順でうまくいかない場合が
多いので、まずFaceEmoの公式マニュアルで似たような記述がないか
探してみます!
すると、撫でられた時に表情を変える方法の記述が見つかりました!
この方法を応用して、実現できないかを検証していきます!
公式サンプルの確認
「撫でられたときの表情を設定する」のページによると、
そのためのprefabがあるようなので作ってみます!
Projectビューのどこでも良いのですが
Assets->Suzuryg->FaceEmoの場所で右クリックし
Create->FaceEmo_EmoteOverrideExampleをクリックします!
![](https://assets.st-note.com/img/1739359721-6fUYSXyiqCNKG4BI7jcWVFOr.png?width=1200)
すると、prefabとAnimator Controllerができます!
![](https://assets.st-note.com/img/1739360317-fFKx7BWwRZ6tEnM1Qd4bpPIi.png)
prefabの確認
prefabをFaceEmoPrefabの中にドラッグ&ドロップして
仕組みを細かく見ていきましょう!
![](https://assets.st-note.com/img/1739360568-z1VjR9d2HsAIumbWQCnO6TUe.png)
まず、FaceEmo_EmoteOverrideExampleをみると
MA Bone ProxyとMA Merge Animatorがついていることがわかります!
![](https://assets.st-note.com/img/1739360873-QehomA1bsGV8nHMrPD3K49p0.png)
MA Bone Proxyは
ターゲット:Head
配置モード:子として・ルートに配置
と設定されているので、頭の位置に配置され、頭に追従にすることが
わかります!
頭を撫でられたときの表情を変更する機能なので
頭の位置に配置され、頭に追従する設定なワケですね
で、次にMA Merge Animatorですが
FaceEmo_EmoteOverrideExampleのAnimator Controllerを
FXレイヤーに追加する設定ですね
このAnimator Controllerはあとで見ることにして
先にCNST_TOUCH_NADENADE_POINTを見ていきましょう!
![](https://assets.st-note.com/img/1739361614-XGiL7Zyzm2p4Y30JdgPNIoe8.png)
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がありました!
![](https://assets.st-note.com/img/1739362577-vKdVSTW8ofb5xr6lQwyjp1uI.png?width=1200)
IDLEからACTIVEに向かう矢印を見てみると
CNST_TOUCH_NADENADE_POINTがtrueの時
つまり、頭が撫でれられている時にACTIVEに移行することがわかります!
![](https://assets.st-note.com/img/1739362805-r9vKuXcy2JQTCLs8IqUhRVAz.png?width=1200)
次に、ACTIVEをダブルクリックすると
NadeNadeで、撫でられた時に変更したい顔のアニメーションが
設定されており
![](https://assets.st-note.com/img/1739362971-7OaMBG9JZ5VgDIe3F2q1nACS.png?width=1200)
NadeNadeからExitに向かう矢印で
CNST_TOUCH_NADENADE_POINTがfalseの時
つまり、手が頭から離れた時にもとの顔に戻る
という動きになっていることがわかります!
![](https://assets.st-note.com/img/1739363045-4rxep8huDTNQiMEnSbmkKO9o.png?width=1200)
と、全体の仕組みがわかったところで
この仕組みを改造して、Physboneが掴まれた場合に
表情が変更されるような機能を作っていこうとおもいます!
実装
それでは、作っていきましょう!(๑•̀ㅂ•́)و✧
今回は、「帽子を掴まれた時に表情を変更する」が目的です!
帽子のPhysBoneの設定
帽子のVRC Phys Boneの下の方にあるOptionsを開きます!
そして、Is AnimatedにチェックをつけるとParameterが表示されます!
このParameterには、わかりやすい名前を設定します!
私は「ChocoHat」にしました!
![](https://assets.st-note.com/img/1739413840-mnUj8g7TWc02MXRSyPOovC1u.png?width=1200)
拡大してみるとParameterの下に色々と表示されています!
![](https://assets.st-note.com/img/1739414044-lguQ4vezfGUrhZBwiVL5cC8J.png)
これは、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を
頭に追従させることが目的で、今回の目的には関係しないので削除します!
![](https://assets.st-note.com/img/1739415305-8Kp3UGaZHbkRAryvXl6mxJLO.png?width=1200)
また、このprefabの子オブジェクトになっているCNST_TOUCH_NADENADE_POINTも、今回の目的には関係ないので
削除します!
Animator Controllerの編集
パラメータにあるCNST_TOUCH_NADENADE_POINTは不要なので削除!
そして、ChocoHat_IsGrabbedを追加します!
![](https://assets.st-note.com/img/1739422012-9Sa7T5uDlnR6hQWLOVrINcA2.png?width=1200)
そして、IDLEからACTIVEに向かう矢印で
CNST_TOUCH_NADENADE_POINTがtrueという条件を削除!
ChocoHat_IsGrabbedがtrueという条件を追加します!
![](https://assets.st-note.com/img/1739422157-ld25cyspmTgQW1LYZAPfIHaR.png?width=1200)
そして、ACTIVEをダブルクリックし
NadeNadeに好きな表情アニメーションに変更します!
![](https://assets.st-note.com/img/1739423388-VaBx0SKlWrFIUGmPvAipDzuX.png?width=1200)
私は帽子を掴まれた時に、この表情にしようと思うので
この顔を設定します!
![](https://assets.st-note.com/img/1739423589-OIaXEhHnuiSY5mw70pf9bMoG.png?width=1200)
そして、NadeNadeからExitに向かう矢印で
CNST_TOUCH_NADENADE_POINTがfalseという条件を削除!ChocoHat_IsGrabbedがfalseという条件を追加します!
![](https://assets.st-note.com/img/1739423829-6mJlKgS2rAN5YTL7onZ9RVpU.png?width=1200)
Gesture Mangerを起動して動作を確認してみます!
Gameビューで帽子にカーソルを持っていって
クリックして引っ張ってみます!
![](https://assets.st-note.com/img/1739431180-QoHW1SGKpy7X5B8ChOdNj24z.png?width=1200)
やりました!( •̀ ω •́ )✧
これで「帽子を掴まれた時に表情を変更する」が実現できました!
もし、うまくいかない場合はPhysboneのParameterと
Animator ControllerのParameterの名前を確認してみてください!
名前が違っていると動かないので注意です!
おわりに
細かく説明していたら、けっこう長くなってしまいましたが
大丈夫でしたでしょうか?o((>ω< ))o
他の方が作ったアセットでも、こんな感じに設定内容を見ながら
応用してみると、やれることが広がって楽しいですし
最初から自作するよりもハードルが低かったりします!
特にPhysBoneやContactsを使ったギミックは
Exメニューを開かずに動作させることができて
直感的でとても楽しいです!( •̀ ω •́ )y
もし、興味のある方はいろいろいじって
遊んでみてくださいね!
それでは!