他のプレイヤーからも見えるカメラをEmoteSwitchでアバターに仕込む
https://gyazo.com/c72c1ec40bc236b11acb8413419b3939
VRChatのアバターにCameraを仕込んだ場合、Cameraコンポーネントが初期状態でActiveだとローカル(自分自身にしか見えない)、非Activeだとグローバル(他のプレイヤーからも映像が見れる)になる。
グローバルカメラをアバターに仕込む場合、表情アニメーションオーバーライドで非Active状態のCameraコンポーネントをActiveにして実装するやり方が簡単で一般的かと思われる。
一方でEmoteSwitchで出し入れする小物でグローバルカメラのRenderTextureを使いたい場合、EmoteSwitchの機構自体にCameraコンポーネントのActive化を仕込むのが良いと思われる。
■TL; DR
https://gyazo.com/40d651c223578843919e1a2ffd303d98
https://gyazo.com/c7148b4f5f1bf08eeee7bdd32d735fa4
EmoteSwitch V3 > TggleSwitch フォルダのObject_ON&OFFアニメーションに対して、画像のようにCameraコンポーネントのActive/非Activeアニメーションを追加する。(アニメーションとアニメーションコントローラを複製して、そちらに対しての編集を推奨)
■原理と実装方法
(EmoteSwitchの使い方等は分かっている前提で進みます)
EmoteSwitchを設定すると以下のような構造になっているはず。
https://gyazo.com/46907e7eac8fd873c7c28eb6d99b85d2
(VRC_SS_Camというオブジェクトに対して設定した場合)
このToggle1というゲームオブジェクトにはAnimatorが設定されており、エモート使用時にこれが有効化されてObject_ON&OFFというステートに遷移する。
https://gyazo.com/6fd7412823801a445388ccff200d7210
(画像は改造後のものなのでControllerにSwitch_camが割り当てられているが、標準ではSwitchという名前のコントローラが設定される)
Object_ON&OFFでは(紛らわしいが)Object_ON&OFFというアニメーションが設定されており、この中でObjectのActive/非Active化を行っている。
https://gyazo.com/40d651c223578843919e1a2ffd303d98
https://gyazo.com/c7148b4f5f1bf08eeee7bdd32d735fa4
Object_ON&OFFアニメーションは(少々わかりにくいが)最初の2秒は非Active、2秒以降はActiveになるアニメーションになっており、表示エモートと非表示エモートではこのアニメーションを何秒再生させるかによって最終的なActive状態をコントロールしている。(エモートが終了するとAnimatorは非Active状態に戻ってObject_ON&OFFアニメーションが停止する)
つまり画像の通りCameraコンポーネントのActive/非Active状態をアニメーションに追加させれば、グローバルカメラのEmoteSwitch実装が実現できる。