コンポーネント
- ContextMenu
- ContextMenuItem
- ContextMenuItemSource
- ContextMenuSubmenu
- RootContextMenuItem
カスタムコンテキストメニューの作り方
コンテキストメニューの表示方法は2種類あります。(通常はどちらかの手法を使用します。)
- アバター等に設定する場合
RootContextMenuItemコンポーネントを使用します。- アバター内に新規スロットを作成。
- そのスロットに、RootContextMenuItemとContextMenuItemSourceをアタッチ。
- RootContextMenuItemのItem欄に、ContextMenuItemSourceを指定。
- ContextMenuItemSourceのLabel・Color・Spriteを設定。
それぞれ適当に設定してください。(Sprite画像は無くても問題ありません。)
以上でカスタムコンテキストメニューができました!
そのアバターを着て試してみましょう。
Tキー又はBボタン等を押すと、コンテキストメニューが開きます。そこに、今作ったカスタムメニュー(ボタン)が追加されているはずです。
※RootContextMenuItemを増やし過ぎちゃうと、コンテキストメニューが細くなって操作しずらくなってしまいます。ほどほどの数に留めておきましょう。ここで作ったのは、あくまでもボタンだけです。次は、このボタンを押した時の動作を設定しましょう。
- アイテム等に設定する場合。
ボタン系コンポーネント(TouchButton等)を使用します。
RootContextMenuItemの替わりにボタンを使用するだけです。
次の階層を開く場合はContextMenuSubmenuを使用します。
(この作り方はあくまでも一例です。)
- ContextMenuItemSourceと同じスロットに、ContextMenuSubmenuをアタッチ。
- ContextMenuSubmenuのItemsRoot欄に、自スロットを指定。
- 子スロットを新規作成。
- 新規作成したスロットに、ContextMenuItemSourceをアタッチ。
- ContextMenuItemSourceのLabel・Color・Spriteを設定。
以上でカスタムコンテキストサブメニューができました!
メニュー(ボタン)の数を増やす場合は、手順3~5を繰り返してください。
表示される順番はスロットの順番と同じです。(スロットの順番は、OrderOffset値で並べ替えできます。)
ItemsRoot欄は、当然ながら他スロットを指定する事ができます。
工夫すれば、次のサブメニュー階層を表示したり、前のサブメニュー階層を表示したりできます。
値の書込みや、トグルボタン等を作る場合。
ContextMenuItemSourceはボタン系なので、Button Interactionsと組合わせることが可能です。
メニュー(ボタン)の見た目を連動させる場合。
例えば、トグルボタン(On/Off)のラベルや色等を連動させたい場合、ContextMenuItemSourceのLabel・Color・Spriteを、状態に応じて切替える必要があります。
そんな時は、ValueOptionDescriptionDriver等が便利です。
閑話
がんばれ
コンテキストメニューの制作は少々手間が掛りますが、最初に作ってしまえば次回からは複製して改造するだけです。
多くのアイテムが共有されているので、リバースエンジニアリングすると勉強になります。(先人に感謝です。)
どうしてもわからない場合は、フレンドやメンターさんに素直に聞いてみましょう。
ContextMenuとContextMenuItemコンポーネントについて
この二つはコンテキストメニューの内部処理に関わるコンポーネントです。
おそらくユーザーが使用する事は無いので、ここでの解説は行いません。
ロストテクノロジー
Resonite紀元前よりも昔の話になりますが、当時カスタムコンテキストメニューを作るのは非常に困難でした。しかし、アップデートによってContextMenuItemSource等がもたらされ、容易に作る事ができるようになりました。
その為、ContextMenuItemSource等を使用せずにカスタムコンテキストメニューを実装する技術はロストテクノロジーになりつつあります。
スライダー
コンテキストメニューはボタン(押す)操作しかできなさそうですが、実はドラッグ操作も可能です。
Fluxも活用すれば、スライダー(無段階のボリューム調整等)を実装できます。
俗称
日本でのコンテキストメニューの俗称をいくつかご紹介します。
「コンテクストメニュー」・・・カタカナ発音の違い。(伝わればOK)
「ラジアルメニュー」・・・古代人かも!?
「丸いメニュー」「リングメニュー」・・・初心者さんを案内する時に使いがち。