ワールドクリエイターの強い味方!ワールドギミック集「Fukuro Udon」の紹介・導入解説【VRChat】

ワールドを作って、アップロードできるようになったのはいいものの、何か味気ない、謎解きワールドや友人をびっくりさせられるようなワールドを作りたいと思っていませんか?

そんなあなたに、今回はみみーさんが作成した「Fukuro Udon」をご紹介します。 「Fukuro Udon」は、その名の通り、豊富な機能をパックにしたUdonのセットです。 「こんな機能が欲しかった!」という願いを叶え、ワールド制作をサポートします。

下の一覧で1つでも悩んでいる悩みがあればぜひ見てください。

解決できること

・部屋の中と外でBGMを変えたい、足音を実装したい
・机の上にたくさんのご飯を並べたいけどON/OFFできるようにしたい
・高低差が結構あるから飛べるようにしたい
・1枚セットするだけでレイヤー機能があるミラーが欲しい
・スライドショー機能が欲しい
・部屋単位でボイス音量を管理したい
・ホームワールドを作ったんだけど、ドアが動かないので動きを付けたい
・ゲームワールドを作ったのでプレイヤーの身長や音声周りなどを統一させたい
・キャスター付き椅子で存分に事務所を走り回りたい

ワールド作成したい人はこちら

本記事はワールド作成をある程度進めた人を想定しています。ワールド制作そのものをやったことない人はこちら!

導入手順

こちらのリンク へアクセスし、「Add to VCC」から「https://vpm.mimylab.com/index.json」を追加。

VCCのウィンドウでSetting – Packages – Add Repositoryの順に開き、https://vpm.mimylab.com/index.jsonを追加します。

VCCから任意のプロジェクトを選択し、「Manage Project」からManage Packages画面に移動します。

読み込んだパッケージが一覧に出てくるので、 Fukuro Udon の右にある「+」ボタンを押すか「Installed Version」から直接バージョンを選ぶことで、プロジェクトにインポートします。

後は使用するパッケージを追加して立ち上げます。

追加された「Fukuro Udon」は「Assets」フォルダではなく、「Packages」フォルダに追加されています。

これで準備は完了です。

各パッケージの機能

スイッチに合わせて操作したい場面に! Active Relay

オブジェクトにアタッチすることで、そのオブジェクトのアクティブ状態に合わせて、別のオブジェクトのアクティブ状態を切り替えたり、音を鳴らしたり、Animatorのパラメーターを書き換えたり、指定したコンポーネントのオンオフを切り替えたりすることができる汎用ギミック集です。

オブジェクトのアクティブをオンオフするスイッチギミックと併用することで、スクリプトを書かずに痒いところに手が届くギミックが組めるようになります。

さまざまなイベントをトリガーにしてオブジェクトのアクティブを切り替える汎用ギミックもあります。

導入方法

ActiveRelayを付けたいオブジェクトをHierarchyから選択し、「Add Comppnent」から ActiveRelay と検索して、使いたいコンポーネントを選んでアタッチしてください。

「Game Objects」に動作させたいオブジェクトを入れます。

GIFでは「ActiveRelay by Interact」にてドアをトグルアクティブにて制御しています。

これにより例として、どこかに隠されたスイッチをONにすると扉が開くなどの動作が可能です。

他にもサウンド周りやアニメーションを制御するプレハブがあるので複合させると例えば、謎解きなどでクリアした際の演出を発生しやすい機能になっています。

プレイヤーに初期設定を設ける Advanced World Settings

自分自身を含めた、ワールドに入ってきたプレイヤーの初期設定をするギミックです。

Udonからプレイヤーに対して設定可能な、およそ全部の項目が設定できます。

設定可能項目

・プレイヤーの移動関連
・プレイヤーのピックアップ関連
・プレイヤーの音声関連
・アバターの音源関連
・プレイヤーのアバタースケーリング関連

これらの設定により、ゲームワールドなどでアバターの身長差による不公平やギミックの作動保障、スピードの調整などによる難易度の調整が容易になります。

導入方法

これから新しくワールドを作る場合は、VRCWorldプレハブをHierarchyに一つだけ置いて、各種パラメーターを設定してください。

既にシーン中にVRCWorldがある場合は、 VRC Scene Descriptor と一緒に付いている WorldSettings のUdonコンポーネントをRemoveして、代わりにAdvancedWorldSettingsプレハブをHierarchyに一つだけ置いてアクティブにしてください。

環境音のギミックに AmbientEffect Assistant

ワールドの環境音や演出を向上させるために、AudioSourceの再生位置とMeshRendererの表示位置を可変にするギミック群です。

AudioSourceやAudioReverbZoneの距離減衰は通常、球状にしか設定できませんが、このギミックは、距離減衰開始範囲の形状を、指定したコライダーの形に拡張できます。これにより、AudioSourceの設置数を節約する事ができます。

また、プレイヤーが衝突した時に、衝突したコライダーとの接触点から音やパーティクルを出せるようにするギミックも入っています。

導入方法

Packages > Fukuro Udon > Samples > AmbientSoundAssistant にサンプルプレハブが入っています。

Hierarchyに追加後、階層やつながりの参考としてくみ上げてください。

上の図はコライダーの範囲内でBGM1が鳴り、一部はそれを無効化しBGM2が鳴るように設定しています。

使用例としては、広い草原などのさわやかなBGMの中に、家などを置いたときに家の中専用BGMが流せるといったような運用ができます。

オブジェクトのグループ化でアイテムの出し入れを楽に GameObject Celler

任意の複数のオブジェクトをグループ化し、ON/OFFができるようになります。

VRChatのワールドに置いて、多量のオブジェクトのアクティブを管理するギミックです。

主に店舗系ワールドのグラスや料理等、ピックアップオブジェクトの出し入れに使う想定です。

導入方法

Packages > Fukuro Udon > Samples > GameObjectCeller フォルダー内にサンプルPrefabが入っています。プレハブをHierarchyに置いてください。

ObjectPoolにまとめて管理したい物を入れていきます。これで一括管理したいオブジェクトの塊ができるので、Switchに対応させたいObjectPoolをリンクさせます。

Switch Typeにてオブジェクトのスポーンの種類が変更でき、ランダムなどもあります。

取手を掴んでドアを開こう Grab SlideDoor

取手を掴んで開閉操作ができるドアギミックです。スライドドアとスイングドアの2種類が用意されています。

開閉状態は同期する他、開ききった/閉じきった際に追加で、登録したオブジェクトのアクティブかOcclusionPortalコンポーネントの Open を切り替える機能もあります。

導入方法

Packages > Fukuro Udon > Samples > GrabSlideDoor にサンプルプレハブが入っています。

サンプルプレハブをHierarchyに置いたら1回Unpackして、 MoveDoor の中にある仮メッシュオブジェクト(MoveModel)を消して、ご自身のドアのモデルに差し替えてください。

StaticModel オブジェクトは子にドア枠などを入れる想定ですが、不要であれば丸ごと削除してください。

PickupHandle の子にはメッシュオブジェクトは入れずに、コライダーだけ取っ手にしたい位置・サイズに調整してください。位置はTransformで、大きさはColliderのSizeで調整することをお勧めします。

ドアの開閉状態を同期させたくない場合は、このオブジェクトに付いている VRC Object Sync をRemove(削除)してください。

スライドドアは MoveDoor オブジェクトに付いている Limited Position Constraint コンポーネントの、スイングドアは Limited LookAt Constraint コンポーネントの各パラメーターを調整する事で可動範囲を制限できます。

赤枠はスライドドア、青枠はスイングドアです。

MoveDoorに実際動かしたい扉をリンクさせ、Staticのチェックを外します。

ドア枠など動いてほしくないものはStaicModelの中に入れましょう。

元は動かないドアが動いているのが確認できます。

コントローラーで飛行しながら移動できるように Input Flying System

VRChatのワールドに置くことで、コントローラー(キーボード)の入力のみで飛行移動ができるようになるギミックです。

導入方法

Packages > Fukuro Udon > Samples > InputFlyingSystem にサンプルプレハブが入っています。

プレハブをHierarchyに置くだけで有効になります。

空中に居る間にジャンプボタンを押す(いわゆる2段ジャンプする)と飛行状態になり、プレイヤー重力と移動操作が専用のものに切り替わります。地面に着地すると通常歩行状態に戻ります。

操作方法は以下の通りです。

VRモード

移動操作(左サムスティック)で水平移動、視点操作(右サムスティック)の上下で昇降移動します。ジャンプ操作で上昇移動します。

デスクトップモード

移動操作(WASDキー)で水平移動、QキーとEキーで昇降移動します。ジャンプ操作(Spaceキー)で上昇移動します。

同期周りにお困りの場合はこちら Manual ObjectSync

VRC Object Sync コンポーネントはアタッチするだけで同期してくれますが、 ContinuousSync(連続同期) のため、 ManualSync(手動同期) のUdonスクリプトと相性が悪い事が知られています。これは、Manual Sync な VRC Object Sync の代替として開発されたU#スクリプトです。オブジェクトにアタッチするだけで、Transformの位置、回転、スケールの変更が自動的に同期されます。

導入方法

ManualObjectSyncを付けたいオブジェクトをHierarchyから選択し、「Add Comppnent」から Manual Object Sync を検索してアタッチしてください。

このコンポーネントを付けると、オブジェクトのオーナーが一定間隔でTransformに変動があるかをチェックし、変動があれば同期します。

一緒に Rigidbody が付いている場合はIs Kinematic、Gravityの同期的制御もできるようになっています(ただし、非オーナーは同期の都合上Is Kinematicが強制オンにされます)。

位置一括リセットスイッチ

サンプルに位置一括リセットスイッチのプレハブが入っています。

インタラクトすると Reset Objects 配列にセットされた同期オブジェクトを初期位置に戻すギミックです。

具体的には、 VRC ObjectSync や Manual ObjectSync 、 SmartObjectSync 、または Respawn() メソッドを持つUdonスクリプトが付いたオブジェクトのOwnerにRespawn()を実行させます。

オブジェクト追従化コライダー

サンプルにMOS Attacherという名前でオブジェクト追従化コライダーのプレハブが入っています。

このコライダーに接触(コリジョン or トリガー)した Manual Object Sync をアタッチモードにします。

主にピックアップオブジェクトを引き出しの中に閉まっておいたり、トレーの上に乗せて運んだり、といった利用を想定しています。

ピックアップイベント転送スクリプト

オマケで、ピックアップ系イベント(OnPickup, OnPickupUseDown, OnPickupUseUp, OnDrop)とInteractイベントを別のオブジェクトに付いた Udon Behaviour (またはU#スクリプト)に横流しできる、 Pickup Event Transfer コンポーネントを追加しました。

VRC Object Sync を使ったピックアップオブジェクトから ManualSync な Udon Behaviour 、U#スクリプトを使いたい場合に便利です。

ミラー複数設定するならこれ! Mirror Tuner

従来のミラースイッチは、複数の設定済みミラープレハブを切り替えて使うものがほとんどでした。このギミックでは、単一のミラープレハブに対して、Udonから設定値を直接書き換えることで、柔軟に切り替えることができます。

つまり、プレイヤーのみを映す状態、すべて映す状態、といったミラーに搭載されている複数種の設定を楽に設定できます。

導入方法

Packages > Fukuro Udon > Samples > MirrorTuner フォルダー内にあるプレハブをHierarchyに置きます。

Profile オブジェクト内の各ミラープロファイルの設定を調節する事で、そのプロファイルに切り替えた時に、その内容がミラーに反映されます。

プロファイルオブジェクトを増減させた場合は、 Mirror オブジェクトの Mirror Tuner コンポーネントの配列も増減させてください。なお、 Mirror Profile Change Switch のターゲット番号が指定するものは、この配列番号です。

部屋ごとに音を分けたいなど音の制御をしたい! PlayerAudio Master

VRChatのワールドに設置して、インスタンス内の各プレイヤーの声量とアバター音量を統括管理し制御するためのギミックです。

組み合わせにより、個室、ミュート/シャウトエリア、メガホン、遠隔通話などの機能を同時に組み込むことができるようになります。

導入方法

Packages > Fukuro Udon > Samples > PlayerAudioMaster フォルダーの中に、構築済みのサンプルプレハブ各種が入っています。Hierarchyに置いてUnpackし、中の設定を書き換えたり、必要に応じて複製・削除して調整してください。

なお、このギミックには多くの機能、設定が含まれています。必ずこちらを参照して制作してください。

スライドショーを作るときに Smart Slideshow

VRChatのワールドに設置できる、uGUIを使ったスライドショーギミックです。

以下の機能を備えており、フォトフレームやプレゼンテーション用モニター、ルールブックなど、応用次第でさまざまな用途に使うことができます。

導入方法

Packages > Fukuro Udon > Samples > SmartSlideshow にサンプルプレハブが入っています。

サンプルプレハブをHierarchyに置いたら、LiteratureオブジェクトのSlide配列にテクスチャーをセットしてください。

Literatureはスライド内容のグループ分けの機能としてとらえるとわかりやすいかと思います。

椅子の上下移動、回転できるように Swivel Chair 2

VRChatのワールドに設置できるギミック椅子です。

以下の機能を備えています。

  • 座った後の座位置調整(手動)
  • 椅子のスイベル回転
  • [Option]椅子のキャスター移動
  • [Option]ピックアップによる椅子の運搬

導入方法

Packages > Fukuro Udon > Samples > SwivelChair2 にサンプルのPrefab各種が入っています。

PrefabをHierarchyに置けば、椅子ギミックとして動きます。

サンプルプレハブには基本機能のみのものや、ピックアップして移動させられるもの、キャスター移動機能が設定済みのものなどバリエーションを用意してあります。必要に応じて選択してください。

視界にオーバーレイしたいときに VR Follow HUD

VRにおいて、視界にピッタリ張り付くHUD(Head Up Display、いわゆるオーバーレイ表示)をビューポイントの移動に遅延して追従させるUDONギミックです。

パラメーターで位置と回転を別々に設定でき、遅延させずに同期させる事も可能です。 また、追従箇所を指定する事ができるので、HUD以外の用途にも応用できます。

導入方法

Packages > Fukuro Udon > Samples > VRFollowHUD にサンプルプレハブが入っています。

プレハブをHierarchyに置くだけで、 VR Follow HUD がアタッチされたオブジェクトがローカルプレイヤーに追従するようになっています。

追従させたいオブジェクトにこのコンポーネントを「Add Component」から直接アタッチしても可能です。

ここまで最低限の導入方法、機能だけの紹介でした。しかし、これら一つ一つのギミックにさらに多彩な機能が含まれているので、こちらを熟読の上自分が使いたい、必要な機能を考慮して導入してください。

一部ギミックはVRChatのサンプルワールドで体験可能

一部のギミックはVRChat上サンプルワールドにて公開されています。導入前に実物を見に行くのも良いでしょう。

●参考リンク
Github
みみー(X)