![見出し画像](https://assets.st-note.com/production/uploads/images/21234321/rectangle_large_type_2_396003ad0b0c4e33ea4037571513742f.png?width=1200)
ぽやんでもわかるEmoteSwitchV3の解説
-はじめに-
初心者向けに仕組みの解説が欲しいという要望があったためEmoteSwitch V3の仕組みをざっくり簡単に解説しようと思います。
〈こういった挙動をするモノ〉、〈それを利用してこのような構造になっている〉といった感じにEmoteSwitch V3の概要をなんとなく理解してもらえたら幸いです。
-内部の仕組み-
EmoteSwitch V3には核<コア>となるAnimatorが1つだけあります。この核<コア>が最も重要な要素になります。
まずはこのAnimatorがどのような役割を果たしているのかを説明させて頂きます。
Animatorは再生中にコンポーネントをOFFにした場合、OFFにした時の状態で保存(固定)される仕様があります。
https://gyazo.com/be49362d76c4606796ded3c46bc115c5
この現象を利用してオブジェクトをON/OFFの状態に保存(固定)しているモノがEmoteSwitchの主な仕組みです。
もちろんオブジェクトのON/OFFだけではなく、マテリアルの変更やポジション・ローテーション・スケール・コンポーネントのON/OFF等アニメーションで弄れるものは全て保存(固定)できます。
因みにAnimatorコンポーネントをOFF→ONにした場合、リスタート(0秒から再スタート)する仕様があり、それを利用したものが私が出している別の機構であるNoBlinkSetter(自動まばたき重複防止)の仕組みになります。
※Unity2017以前ではこの仕様は確認できません。(Animatorコンポーネントを直接ON/OFFでは無理、Animation内部パスキーのEnabledによるON/OFFで確認可能)Unity2018移行では直接確認できます。
-内部構造-
V3の原型であるEmoteSwitch V2及びInventory Systemでは、VRCでAnimator二つによって一つのオブジェクトをON/OFFした場合、FPSが徐々に上昇していくバグが発生していた。そのためEmoteSwitch V3では、VRCにおけるFPS上昇バグの対策としてAnimator一つでON/OFFを制御するように構成しました。
https://gyazo.com/51bad79227286c45192fec98a5e6dad7
Toggle1にAnimator(初期OFF)があり、内部のAnimationは時間差でON/OFFに遷移するようになっています。(0~0.19秒帯ON、0.2~1秒帯OFF)
後はEmoteのAnimationによってAnimatorコンポーネントをONにし、OFFにする(終了)タイミングを時間指定する事でオブジェクトをON/OFFで固定しています。
https://gyazo.com/37c25c4b3a849d894028eb48cde7d6f3
オブジェクトをONにするEmoteAnimation(0.37秒)
https://gyazo.com/3f5aac5c0f6d7e40a7f8d2ee454d530c
オブジェクトをOFFにするEmoteAnimation(0.17秒)
-オマケ-
EmoteSwitch V3が4階層になっている理由はJointを利用できる構造体を想定しているためです。
通常のJoint利用はもちろん、最上部のEmoteSwitch V3にワールド固定を設定する事による疑似ピックアップ等のアバターギミックを利用できるようにしています。
疑似ピックアップについては下記のサイトや動画で作り方が紹介されています。他にも解説サイトはあるので気になる方は検索してみると良いでしょう。
サイト:https://keiki002.com/vr/fake-pickup/
動画:https://www.youtube.com/watch?v=lBTCoXmNKa8
この記事が気に入ったらサポートをしてみませんか?