Resoniteでアバターに何かしらの機能をインストールさせるツールのサンプルの解説記事です。
例えばコンテキストメニューを追加して何かさせたりするようなアイテムをユーザーに導入させるときなどのインストーラーとして使えるかと思います。
アイテムの入手先
https://uni-pocket.com/ja/items/2b947dcc-348c-4f3b-a3f8-4a9bf0a50661
使い方
①InstallcontentsのSlotの子にあるSlot(ItemNameAとItemNameB)を削除し、自分がインストールさせたいアイテム(機能)Slotに差し替える。
②アイテム(機能)Slotのタグに他と被らないような名前を設定する。
③UIの名前を差し替えて、(必要なら)ボタンを変える、効果音をつけるなどして体裁を整える
このアイテムでやっていること
①アバターのルートSlotを探す(コードを改変すればユーザーのRootSlotにも対応)
②既にインストールされていないかチェック
③インストールしたいアイテムをコピーする
の3つだけです。
マルチ環境未確認かつ上手く動かない例外はありますが、大体のアバターと状況には対応していると思います。
インストール
アバターのルートSlotを探す
ほとんどのアバター内にある(と思われる)Head ProxyのSlotを探してその親(=アバターのルート)を取得するという方法を取っています。
余談(没コードの話)
ボタン押下イベントを使っているため、最初はボタンを押したSlot(ふつうはレーザーか指のSlotになる)のObjectRootを取りに行くという方法を検討していましたが、腕や肩に何かしらのアイテムを装備しているとそっちのObjectRootに反応してしまいそうだったので、最終的に上記コードを採用しています。 色々試してみて実はこちらのコードのほうが良いと分かった場合はしれっと差し替えているかもしれないです。 例えばこのコードの場合はHead Proxyがなくても動く(筈)とか、アバターに手がなくてもレーザーでボタン押下できるなら機能する(筈)といった利点があったりします。既にインストールされていないかチェック+インストール

インストール自体はInstallcontentsのSlotの子にあるSlotをアバターのルートにコピーすることで実現しています。
2重でアイテムがインストールされないように、タグに他と被らないような独自の名前を付けてあげることで
そのタグを含んだアイテムの有無でチェックを行っています。
画像のItemNameAとItemNameBを自分が作ったアイテム(もしくは機能)に差し替えてタグをつけてあげれば機能するはずです。
複数アイテムにも対応しています。
アンインストール
インストールの逆のことをやっています。
技術的にはインストールの解説を読んでいただければ大丈夫だと思います。
やっていることはInstallcontentsのSlotの子のタグと同じアイテムがあれば削除、なければ何もしないといった動作をしています。


