[Udon] Player Selector
- 通常版0 JPY
- 開発支援版(追加サンプルあり)300 JPY
VRChatのワールドインスタンス内の「誰か」に「何かをさせる」のが楽になるかもしれないワールドギミックのテンプレート的アセットです。
概要
例えばライブイベントなどで、特定の誰かにライトを当てたり、ワールドに仕込んだ配信用カメラを向けたりなどはよくありますが、その際の「誰か」を選ぶ行為をサポートするようなアセットになります。 本アセットでは「『誰か』を選ぶ」ところまでのサポートとなるので、その先の「何かをさせる」動作は各自UdonSharpで実装していただくことになります。 UdonSharpに慣れ親しんでいる方向けのアセットになりますが、「何かをさせる」の部分は独立したモジュールとして配布可能なので、将来的にはモジュール部分だけを他人から提供していただいて、それを組み込んで使う、なんてこともできるかも知れません。 「何かをさせる」のサンプルとして以下の機能をもたせたモジュールを組み込んだPlayerSelectorも同梱しております。 ・PlayerSelectorTeleport:指定した相手の元へ自身をテレポートさせる ・PlayerSelectorSummon:指定した相手を自身の元へ召喚(サモン)できる ・PlayerSelectorChangeScale:指定したサイズで、指定した相手のスケールを変更できる
開発者支援版
上記サンプルに加え、以下のサンプルを同梱しています。 (Assets/Onoty3D/Gimmicks/PlayerSelector/AdditionalSamples内) ・TargetHeadFollowerSystem: 選択プレイヤーの頭にオブジェクトを遅延追従させる ・CinemachineSystem: 選択プレイヤーをCinemachineのターゲットにする 参考 https://twitter.com/onotchi_/status/1766720101674578116 ・PlayerSelectorNoribenBLC: noribenさんのBeamLightController( https://booth.pm/ja/items/5553388 )を補助 参考 https://twitter.com/onotchi_/status/1766753137568944372 ※オブジェクトの遅延追従サンプルではヨドコロちゃんのUnity向け3D座標軸モデル( https://yodokoro.booth.pm/items/2637056 )を利用させて頂いています。 ※TargetHeadFollowerの詳細は、同梱のテキスト(aboutTargetHeadFollower.txt)を御覧ください。 ※PlayerSelectorNoribenBLCはシーン上に配置後、若干のセットアップ作業が必要です。同梱の画像(PlayerSelectorNoribenBLCSetup.png)を御覧ください。
モジュール(「何かをさせる」部分)の作り方
・シーン内に空のGameObjectを作成する(仮にTestModuleという名前とします) ・TestModuleにUdonBehaviourコンポーネントを付加し、Udon C# Program Assetを作成する ・出来上がったクラスのBaseクラスをUdonSharpBehaviourからModuleBaseに変更する (※namespaceはOnoty3D.Gimmicks.PlayerSelectorなので、合わせるかusingしてください) ・クラスで_DoActionメソッドをoverrideして、処理を実装する。 ※_DoActionの引数として、選択されたPlayer(=「誰か」)の情報が渡されるので、それを利用してください。
専用PlayerSelectorの作り方
・PlayerSelectorBaseのPrefab(Assets/Onoty3D/Gimmicks/PlayerSelector配下)をシーンに配置する ・PrefabについているPlayerListHostコンポーネントのModulesに、先述のTestModuleを追加する ・適宜タイトルや説明の文字列を変更する ・リスト内にローカルプレイヤーを表示させる必要がない時はPlayerListHostのIncludeLocalPlayerのチェックを外す ・プレイヤー選択を解除する選択肢を表示したい場合はcanSelectNobodyにチェックを入れる ・選択したプレイヤー名を同期したい場合はSyncSelectedPlayerにチェックを入れる (_DoActionはプレイヤーを選択した当人でしか発生しません。同期的な処理はModule側で実装してください。) --- 余談ですが「Modules」の名の通り、Moduleは複数登録できます。 処理は頭から順に実行され、非活性のモジュールのものは実行されません。
既知の問題
・シーンに複数のPlayerSelectorをおいてUnityEditor上で実行すると InvalidOperationException: Collection was modified; enumeration operation may not execute. のエラーがでる。 →ClientSimのバグ挙動。OnPlayerJoinedでUdon付きのオブジェクトをInstantiateすると発生するっぽい。 Client上ではエラーが起きないのでとりあえず保留。 Editor上で挙動テストしたい時はテストしたいSelector以外を非活性にしてテストしてみてください。
規約、免責他
利用規約: ・本データを未改造のまま再配布、販売することは禁止します。配布が必要な際は、こちらのBOOTHページへご誘導ください。 ・本データを改良、機能追加して販売することは自由にしていただいたいてかまいません。 (利用を報告していただけると喜びます。) ・利用の際にクレジットの表記等は不要です。 免責: ・利用は自己責任とし、トラブルが発生した場合でも一切の責任は負いかねますので、予めご了承ください。 ・VRChat及び関連SDK等の更新により、将来的にギミックが動かなくなる可能性もあります。恒久的なサポートは出来ませんのでそちらもご了承ください。 最終動作確認: VRChat SDK Worlds:3.5.1 Unity:2022.3.6f1 VRChat:Build 1405 連絡: 不明な点がございましたら、オノッチ( https://twitter.com/onotchi_ )までお問い合わせください。 履歴: 2024/03/13 Ver.1.1 PlayerSelector_1_1.zip / PlayerSelectorWithAdditionalSamples_1_1.zip ・一部処理のリファクタリング ・選択プレイヤー名を同期させる機能の追加 ・プレイヤー選択を解除するモードを追加 ・開発支援版にサンプルの追加 --- 2024/02/27 Ver.1.0 PlayerSelector.zip ・BOOTHにて公開