Resonite 自分用ツール制作

主にアバターに仕込む自分用のツール・メニュー等を作る。

自分だけに見えるようにする

HUD・独自メニュー等

  • ValueUserOverride<bool>で対象スロットのActiveをドライブする
  • 複数の場合はValueMultiDriver<bool>を通してドライブする
  • FluxではUserFromUsername -> IsLocalUserでドライブする

Fluxで自分を指定する

実行者にする・状態を取る等

  • GetActiveUserSelf
    • アバターやツール内にパッキング後、着ている・持っている時のみ有効(誰でも)
  • UserFromUsernameに自分のユーザ名を入力
    • 着ていない・持っていない時も有効(自分のみ)
  • 「自分が着ている・持っている時のみ動かす」場合は上2つの一致を==で比較する

取り出すと自動で装備するツール

アバターにツールを入れずインベントリ等から取り出す場合

  • OnLoaded -> EquipTool
    • Toolを引き出してツールのコンポーネント(ToolMultiplexer等)をD&D
    • UserNearestUserHand又はUserFromUsername
    • Sideを引き出して手を指定、又はUserPrimaryHand(上のユーザから取得)

特定のアクションで装備・解除するツール

アバター内にツールを入れておく場合

  • (発動条件) -> FireOnTrue -> DequipToolOnDequipFall -> SetSlotActiveSelf -> EquipTool
    • ToolInstanceにツールのスロットを指定
    • 装備していたら外し、未装備ならアクティブにして装備する
  • ToolEventsDequiped -> SetSlotActiveSelf -> SetParent
    • SetParentNewParentにツールの格納スロットを指定
    • 装備を外した時アクティブを切ってアバター内に戻す

装備を外した時にワールドに落とさず、状態を維持したツールを再装着出来る。

特定のスロットのインスペクターを出すボタン

スティック押し込みや階層掘りが不要になる。初期設定に要Mod

ShowDelegatesでコンポーネントが持つメソッドを取得出来る様になる。

  1. 親スロットに共通で使うDevTool、子にButtonRefEditorReferenceField<Slot>を追加
    • アタッチからDevToolを追加する場合は余計な関連コンポーネントを削除
  2. ButtonPressed:RefEditorのメソッドOpenInspectorButtonをD&D
  3. ButtonReleased:DevToolのメソッドDeselectAllをD&D※
  4. ReferenceField<Slot>Reference:に対象のスロットをD&D
  5. RefEditor_targetRef:ReferenceField<Slot>をD&D

※全ギズモが消えるので自分の作業場用。外で使う場合はNearestGizmoや自分が出したギズモを消すFluxにする。

コンテキストメニューの追加と削除

コンテキストメニューの追加は最初のカスタマイズとしては丁度いいが、項目が増減するリングメニューは不便なので基本的にしない。追加するより可能な限り削除したい。

※リングメニューは状況に応じて項目の位置とサイズが変わり、位置を覚えて素早く選択出来ない。アンドゥ出来ない機能もあるので確実に目視が必要。「腕を上げる/顔を向ける・ボタンを押す・目で探す・手を動かす・トリガーを引く」で手軽ではない。

マルチツールの切替は他の方法で行い、アバターにインストールするタイプのツールもあまり使わないコンテキストメニューが追加される事が多いので削除する。

UIスクロールを改善する

ModのInspectorScrollでUIをスクロール出来るようになるが、Touchコン(RiftS・Quest・それをシミュレートしたPICO4)でアバターが移動してしまう問題がある。
左手でグラブ中はアバターを一時的にアンカーに入れ、移動しないようにする。