[NeosVR]コンポーネント解説11選+コンテキストメニューの追加方法
この記事はNeosVR #1 Advent Calendar 2021の20日の記事です。
昨日の記事はれいほくしーさんの「NeosFesta3の利用規約作成に弁護士が見た未来」でした。
明日はでんこさんの「NeosVRに会えて良かった」です。
はじめに
NeosVRで物を作っていてコンポーネントについて知りたいと思ってもなかなか詳しい説明が見つからない、そう思ったこと一度はありますよね!
なので、今回はコンポーネントについて書いてみることにしました。
私が使ったうえでの解説・感想なので間違っていることもあるかもしれません。ご了承ください。
コンポーネント紹介
Grabbable
場所:Transform/Interaction/
概要:アイテムが持てる
項目解説
・Enable:有効/無効の切り替え
・ReparentOnRelease:掴んで離したときに元の親に戻すかどうか
(後述するGrabbableReceiverSurfaceを使うときは切っておいた方がよいかも)
・GrabPriority:掴んだ時の優先度
(数値が大きいほど優先度が上がる)
・Scalable:両手で掴んで拡大縮小ができるかどうか
雑感
・アタッチすると持てるようになるコンポーネント
・よく使う
GrabbableReceiverSurface
場所:Transform/Interaction/
概要:アイテムが置ける
項目解説
・Enable:有効/無効の切り替え
・ParentPlased:アイテムが張り付いたときに親を置き換えるかどうか
(置き換えないとGrabbableをアタッチしたアイテムがGrabbableReceiverSurfaceをアタッチしたアイテムと連動して動かない)
・OverrideParent:ParentPlasedが有効な時の張り付いたアイテムの親の置き換え先
・Directions:アイテムが張り付く方向
雑感
・Grabbableが入っているアイテムが張り付くコンポーネント
・テーブルや棚などのアイテムを置く場所によく使う
GrabInstancer
場所:Transform/Interaction/
概要:掴むと増える
項目解説
・Enable:有効/無効の切り替え
・Template:掴んだ時に増やすアイテム
・EnableGrabbable:テンプレートのGrabbableを有効にする?
雑感
・掴んだ時に掴んだアイテムが増えるコンポーネント
・掴んで取るくじ引きを作るときに使った
ObjectRoot
場所:Transform/
概要:オブジェクトのルート
項目解説
・Enable:有効/無効の切り替え
・Remove all children object roots:子のObjectRootを削除する
雑感
・アタッチされた場所がオブジェクトのルートであることを示すコンポーネント
・インスペクターの”↑”(下の画像の左のボタン)を押すとObjectRootがあるスロットにいくらしい
ViolentAprillFoolsExplosion
場所:Utility/
概要:アタッチしたアイテムを破棄すると爆発する
項目解説
・Enable:有効/無効の切り替え
雑感
・アタッチするだけでつかえる
・簡単
・アタッチしたアイテムを破棄すると爆発する
RootContextMenuItem
場所:Radiant UI/ContextMenu/
概要:コンテキストメニューを追加する
項目解説
・Enable:有効/無効の切り替え
・OnlyForSide:コンテキストメニューを表示する手を指定できる
・Item:後述するContextMenuItemSourceを入れる
雑感
・コンテキストメニューを追加するが、これ単体では追加できない
・ContextMenuItemSourceと合わせて使う
・こちらはコンテキストメニューの枠のようなイメージ
・コンテキストメニューで表情や髪の色などを変更するのにも使える
ContextMenuItemSource
場所:Radiant UI/ContextMenu/
概要:コンテキストメニューを追加する
項目解説
・Enable:有効/無効の切り替え
・Label:コンテキストメニューで表示する名前
・Color:コンテキストメニューで表示する色
・ButtonEnabled:コンテキストメニューが押せるかどうか
・CloseMenuOnPress:トリガーしたときにコンテキストメニューを閉じるかどうか
雑感
・コンテキストメニューを追加するが、これ単体では追加できない
・RootContextMenuItemと合わせて使う
・こちらはコンテキストメニューの実体(ボタン)のイメージ
・表示する画像なども指定できる。
ContextMenuSubmenu
場所:Radiant UI/ContextMenu/
概要:コンテキストメニューに階層を追加する
項目解説
・Enable:有効/無効の切り替え
・ItemsRoot:サブメニューの入ったスロットを指定する
雑感
・コンテキストメニューに下の階層を追加する
・便利
ButtonValueShift
場所:Common UI/Button Interactions/
概要:ボタンを押したときに値を一定の範囲で一定量変化させる
項目解説
・Enable:有効/無効の切り替え
・TargetValue:値を書き込む場所
・Delta:変化させる量
・Min:最小値
・Max:最大値
雑感
・ボタンを押すと値が変化する
・一方向にしか変化しない(Deltaの値を変えない限り)
・最大値か最小値に到達したらそこで止まる
・コンテキストメニューと組み合わせても便利
・アタッチする際に自分で値の型を指定する必要がある
ButtonValueCycle
場所:Common UI/Button Interactions/
概要:リストの値を順番に適用していく
項目解説
・Enable:有効/無効の切り替え
・TargetValue:値を書き込む場所
・Values:書き込む値のリスト
雑感
・ボタンを押すごとにリストの値が順番に書き込まれる。
・リストはAddで増やせる
・リストの終わりまで行くと先頭に戻る
・コンテキストメニューと組み合わせても便利
・ValueMultiplexerと組み合わせてインデックスを指定すると便利
・アタッチする際に自分で値の型を指定する必要がある
ValueMultiplexer
場所:Utility/
概要:インデックスで指定されたリストの値を書き込む
項目解説
・Enable:有効/無効の切り替え
・Target:値を書き込む場所
・Index:書き込む値のインデックス
・Values:書き込む値のリスト
雑感
・インデックスで指定したリストの値をターゲットに書き込む
・リストはAddで増やせる
・ButtonValueCycleと組み合わせてインデックスを指定すると便利
・アタッチする際に自分で値の型を指定する必要がある
紹介したコンポーネントの使い方
GrabInstancerの使い方
1.Grabbableをアタッチしたアイテムに親を作る。
2.GrabbableのEnableを切る。
3.作った親にGrabInstancerとGrabInstancerをつかむためのコライダーをアタッチする。
4.コライダーのサイズを調整する。(コライダーを可視化するとわかりやすい)
5.GrabInstancerのTemplateにGrabbableが入っているアイテムのスロットを入れて完成。
ContextMenu関連のコンポーネントの使い方
1.アバターの中にスロットを作る
2.作ったスロットにRootContextMenuItemとContextMenuItemSourceを追加する。
3.RootContextMenuItemのItemにContextMenuItemSourceを入れて完成。サブメニューを作る場合は4に続く。
4.ContextMenuSubmenuを追加する
5.ContextMenuSubmenuを追加したスロットにサブメニューを入れるための子を作る。
6.作った子をContextMenuSubmenuのItemRootに入れる。
5.作ったスロットにさらに子を作る。
6.5で作ったスロットにContextMenuItemSourceをアタッチして完成。
さらにサブメニューを増やしたいときは今ContextMenuItemSourceをアタッチしたスロットを複製すればOK。
Ex.ContextMenuItemSourceを入れたスロットにButtonValueCycleをアタッチするとコンテキストメニューを押したときにButtonValueCycleが反応する。ButtonValueCycleでValueMultiplexerのインデックスを指定して色や値をコンテキストメニューから変更できる。