minatchiのResonite覚え書き集①―Component編
☆ご注意
自分が思い返すために書いた記事なので、事実誤認等があるかも知れません!参考にするのはいいですが自己責任で!
掲載順はバラバラですので、初歩的なものからそうでも無さそうなものまでランダムです。
◎主文
1.シェイプキー(1つ)をインタラクトでトグルさせる

TouchToggleとBooleanValueDriver<float>を使用
BooleanValueDriverのTargetFieldにトグルさせたいシェイプキーを入れる
Valueは0/1(よく100にしてエラいことになるので注意)
TouchToggleの設定はデフォルトのままでOK
StateのチェックがインタラクトするごとにON/OFFされているかを確認
TouchToggleのStateをBooleanValueDriverのStateにDriveさせる
TouchToggleのStateを掴んでValueDriverのStateの上で放せばいいはず
これで、インタラクトするごとにON/OFFされるTouchToggleのStateがValueDriverと連動し、シェイプキーの値が0/1.00でトグルするようになる、はず
2.モノを円周上に並べる

整列させたいモノを空スロットの子に格納して、親となった空スロットにCircleAlignerをアタッチすると良い
全てのモノの向きを変えたい場合は、RotationOffsetで調節
3-1.コンテキストメニューの基本

アバターのスロット直下に空のスロットを作成し、そこに以下のコンポーネントをアタッチ
RootContextMenuItem……ItemにContextMenuItemSourceをセット
ContextMenuItemSource……Labelに好きな名前を入れる
子メニューを作成したい場合は、さらにこちらのコンポーネントをアタッチ
ContextMenuSubmenu……ItemsRootに作成したスロット自身をセット
その上で、空スロットにさらに子のスロットを作成し、ContextMenuItemSourceをアタッチ、Labelに好きな名前を入れる
ここが分かりやすい (あるいはここ)
3-2.コンテキストメニューでいろいろやる
【オブジェクトのON/OFF】
ContextMenuItemSourceと同じ場所にButtonToggleをアタッチ
TargetValueに目的のオブジェクトがあるスロットのActiveを入れる

【シェイプキーの操作(一方通行)】
選択するとシェイプキーの値が一定の値になる、それだけ。
ContextMenuItemSourceと同じ場所にButtonValueSet<float>をアタッチ
TargetValueに目的のシェイプキーを、SetValueにセットしたいシェイプキーの値(1~0)をセット。

【シェイプキーの操作(トグル)】
ContextMenuItemSourceと同じ場所に、以下のコンポーネントをアタッチ
ButtonToggle……TargetValueにBooleanValueDriverのStateをセット
BooleanValueDriver<float>……TargetFieldにDynamicBlendShapeDriverの中でセットした目的のシェイプキーのValueをセットし、FalseValueに1、TrueValueに0(あるいは逆)
DynamicBlendShapeDriver……Rendererに動かしたいシェイプキーが入っているSkinedMeshRendererをセット、「Update BlendShape Targets」をクリック
BlendShapes(List)の「Add」をクリックし、出てきたリストのBlendShapesNameに目的のシェイプキー名を手入力する

4.掴んだ物を複製させる
対象物の親に空のオブジェクトを追加し、そこにGrabInstancerをアタッチ
Templateスロットに複製させたいアイテムをセット
この際、子にある複製させたいアイテムのGrabbableは切っておくこと(切らないと複製元を掴んでしまいうまくいかない)

ただし、掴んで出現するオブジェクトは、オブジェクトの一つ上の階層(上図の場合Kyokai_Setの下)に出てしまうので、例えばテンプレート集(Kyokai_Set)の下に複数のGrabInstancerを置く、というようなことをしたい場合、このままだとKyokai_Setを掴んだときにひな形と一緒に複製したアイテムも動いてしまう、という問題がある

これを防ぐためには、Kyokai_Setの直下に空のオブジェクトを作りGrababbleのみを追加、各々のGrabInstancerのContainerTemplateに作った空オブジェクトをセットし、EnableGrabbableのチェックを外す
そうすると、掴んだときに空オブジェクト(Grabbableがついてる)の子に、複製させたいアイテムがGrababbleの切れた状態で格納され、空オブジェクトの一つ上の階層(下図の場合Kyokai_Setと同階層)に出現するので、テンプレート集(Kyokai_Set)とは縁を切ることができる


