見出し画像

【VRChat】IsPosedのススメ【PhysBone】

はじめに

今回は、VRChatのアバターギミックにおけるPhysBoneコンポーネントのパラメータ『_IsPosed』の使い方をひとつ見つけたので紹介します。

それはずばり、アバターギミックに【一度押して、離してもONのままのスイッチ(オルタネイト動作スイッチ)】を組み込む場合のONOFF制御です。

スイッチで物の表示/非表示を切り替えています

これまで私は、PhysBoneコンポーネントでONOFF制御をするのに『IsGrabbed』を使っていました。
これを『IsPosed』に変えたところ、↓のような利点があってすごく良い感じでした。

・誤動作しにくいし、操作性も悪くない
・アニメーターコントローラーを簡略化できる

それぞれ解説します。

『IsPosed』とは?

掴んで固定したときにtrueになるパラメータです。

操作で言うと、↓のような感じです。
ONするとき:Grab押しっぱなし→Open押す→離す
OFFするとき:Grab押す→離す

わかりづらいですが、Physboneを掴んで固定しています

掴んで固定という操作は割と慣れ親しんだものだったので、個人的に受け入れやすかったです。
しかも、ONの操作が複数段階に分かれるため誤動作しにくいのも良いです。

『IsGrabbed』と『IsPosed』の比較

握りっぱなしじゃなくてもONを維持するスイッチを、『IsGrabbed』と『IsPosed』でそれぞれ実装するときの違いを比較してみました。

① AnimatorControllerの簡素さ

『IsGrabbed』は、離してもONを維持するスイッチを実装するとき、【Grabする】→【離す】の2段階のTransitionをAnimatorControllerに組み込む必要がありました。

IsGrabbedを使ったONOFF切り替え
(ほかにもいろいろな方法あるかもですが)

しかし、『IsPosed』はONとOFFのステートを直接結ぶだけで実装することができます。

IsPosedを使った切り替え
とってもシンプル!

② 同期の取りやすさ

この『IsPosed』のコントローラーの構造の優秀なところは、簡単なだけでなく、同期の取りやすさにもあります。
『IsGrabbed』の構造は同期対策をしなければ、一度同期がずれると永遠にONOFFが逆転したまま動作してしまいます。

お互いの目線でONOFFが入れ替わり、永遠に同期されません…

一方、『IsPosed』の構造の場合、そもそも同期ズレしにくいですし、万が一同期がずれたとしてもONとOFFの操作が異なるため、ONOFFを一度切り替えるだけで同期しなおすことができます。(未検証、たぶんそう)

おわりに

「すごく何かに使えそうだけど、結局何に使うの?」
と、言われ続けてきた『IsPosed』。

『IsPosed』でできることはほぼ全て『IsGrabbed』で実装できるため、これまで『IsPosed』はあまり日の目を見る事がありませんでした。

しかし、『IsGrabbed』で実装してきたことの簡易化・整理を目的とすれば、『IsPosed』の新たな使い方が見えてくるかもしれません。

今一度『IsPosed』の使い道を考えてみてはいかがでしょうか?


ここまでお読みいただきありがとうございました!
今回、IsPosedをはじめて有効に使えたのが嬉しくて記事にしてみました。

記事の疑問点や間違い等ありましたら、Xにてご連絡いただけたら嬉しいです!


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