YUTOROOM Essentials
日本の風呂ワールドに不可欠なギミック群
インストール
VCCによる方法
- https://vpm.narazaka.net/ から「Add to VCC」ボタンを押してリポジトリをVCCにインストールします。
- VCCでSettings→Packages→Installed Repositoriesの一覧中で「Narazaka VPM Listing」にチェックが付いていることを確認します。
- アバタープロジェクトの「Manage Project」から「YUTOROOM Essentials」をインストールします。
使い方
BathBombSystem
入浴剤によるお湯の色変化

- VRCPickup+ObjectSyncで投げられる入浴剤コライダーと、同数のマテリアル、アクティブオブジェクトを指定します。
- アクティブオブジェクトには水面下PostProcessing Volumeなどを指定します。
DrinkSound
ドリンクを飲む音
セットアップ
- VRCPickupのついた飲み物オブジェクトに
DrinkSoundPickupを付けます。
- その飲み物オブジェクトの子に
DrinkSound prefabを配置します。
- それぞれを参照させます。
DrinkSoundのAudioSourceに飲む音を設定します。(飲む音を設定したprefab variantを作ると便利だと思います。)
既知の問題
- 同期されて聞こえるようにしようかと思ったがやめた。
- その名残でDrinkSoundPickupがManual Syncになっているため、飲み物オブジェクトにはManualObjectSyncを付けることを推奨します。
FloatingObject
風呂の水面に浮くオブジェクト
などを自然に浮かせる事が出来ます。
上手い具合に数値調整などをする必要があり設定はそれなりに煩雑です。
(共通) 水の領域コライダーを設定する
- 水の領域コライダー
WaterCollider
- 水面高さTransform
WaterColliderTop
- 水面直上の大気領域コライダー
AirCollider
を設定します。

風呂桶(凹面があり空気が入るオブジェクト)のセットアップ
サンプルはSamples/FloatingObject/風呂桶sample.prefabにあります。
VRCPickupのついた風呂桶オブジェクトの下に以下を設定します。
- 開口部を覆うコライダーを作り、
FloatingObjectTopコンポーネントを追加します。
- 下記の
FloatingObjectコンポーネントを参照させます。
- オブジェクトの形状に沿ったコライダーを作り、
FloatingObjectコンポーネントを追加します。
- サンプルを参考に各種設定を行ってください。
- ゆとるーむでは……
- 重さ(Mass): 0.26
- 水平垂直別でのセットアップ:
- 水中での垂直摩擦係数: 32
- 水中での水平摩擦係数: 2.5
- dragでのセットアップ

アヒルのおもちゃ(上面が決定しているオブジェクト)
サンプルはSamples/FloatingObject/ラバーダックsample.prefabにあります。
- オブジェクトの形状に沿ったコライダーを作り、
FloatingObjectコンポーネントを追加します。
- サンプルを参考に各種設定を行ってください。
- ゆとるーむでは……
- 重さ(Mass): 0.01
- 水平垂直別でのセットアップ:
- 水中での垂直摩擦係数: 17.4
- 水中での水平摩擦係数: 2
- dragでのセットアップ

浮き輪(上下面が反転可能なオブジェクト)
サンプルはSamples/FloatingObject/裏表sample.prefabにあります。
- オブジェクトの形状に沿ったコライダーを作り、
FloatingObjectコンポーネントを追加します。
- サンプルを参考に各種設定を行ってください。
- ゆとるーむでは……
- 重さ(Mass): 0.1
- 水平垂直別でのセットアップ:
- 水中での垂直摩擦係数: 4.5
- 水中での水平摩擦係数: 2
- dragでのセットアップ

ビーチボール(等方的なオブジェクト)
サンプルはSamples/FloatingObject/ビーチボールsample.prefabにあります。
- オブジェクトの形状に沿ったコライダーを作り、
FloatingObjectコンポーネントを追加します。
- サンプルを参考に各種設定を行ってください。
- Isotropic=true
- TopPosition/CenterOfMass/StableFloatPositionについてローカルY座標を中心からの径として設定します
- ゆとるーむでは……
- 重さ(Mass): 0.04
- 水平垂直別でのセットアップ:
- 水中での垂直摩擦係数: 5
- 水中での水平摩擦係数: 2
- dragでのセットアップ

Tips
上下位置が安定した後左右に振動する場合はAngularDampeningFactorの桁を小さくしてみて下さい。
FollowPickup
親に追従するPickupオブジェクト
- 親のコライダー内にDropされたオブジェクトは以後親に追従するようになります
- 親のコライダー外にDropされたオブジェクトは以後親に追従しなくなります
風呂桶に酒瓶を置くなどに利用できます。
Drop時に子の位置や向きの補正等は行わないので「トレーに載せる」要件などでは不自然になります。
セットアップ
- 子となるPickupオブジェクトにParentConstraintを追加し、親オブジェクトをSourcesに指定します。Activeにはしません。
- 同オブジェクトに
FollowPickupコンポーネントを追加し、Parentに親オブジェクトの追従領域コライダーを指定します。
- 子オブジェクトは親オブジェクトの外に置きます(ヒエラルキー上の親子関係にはしない)

InWater
水中に潜る時の効果
潜る時の音や視界効果を設定するのに適しています。
セットアップ
InWater prefabを配置し、水中コライダーの位置を合わせます。
- 音系とAudioLowPassFilterを指定します。
- 水中のPostProcessing Volumeを制御する場合、入れ子構造にして親を操作すると
BathBombSystemと連携できます。

ToggleReverbByActive
オブジェクトのON/OFFに連動してAudioReverbFilterをON/OFFします
セットアップ
- オブジェクトに
ToggleReverbByActiveを付けて、AudioReverbFilterを指定します。
- このオブジェクトをコライダー判定などでactive/inactiveにするとAudioReverbFilterが連動します。
- AudioSourceのサンプルが
Samples/AudioSource.prefabにあるのでシーンに配置し参照して下さい。
TriggerInOutSound
コライダーにプレイヤーやPickupオブジェクトが出たり入ったりする時に音を出します
セットアップ
- 水中コライダーに
TriggerInOutSoundコンポーネントを付けます。
- AudioSourcesに音を再生するAudioSourceを何個か設定します。
- 発声上限に引っかからないようオブジェクトプール的に使いまわします。
- 各種の音を設定します。

Tips
YUTOROOMで利用している他のシステムとしては以下などがあります。
(というかむしろ、これらの高い没入感を醸成する重要な要素技術が既にあるにも関わらず風呂ワールドで活用されていないことに歯がゆさを覚えてYUTOROOMが作られたという面が大きいです。これらに加えて付随する風呂体験を作り込んでさらに質を高めようとした周辺技術が本ライブラリの内容なので、とりあえず風呂ワールドを作ろうという場合にはまずは下記の適用を先に行う方が効果的だと思います。)
更新履歴
- 1.2.0
- FloatingObjectで水平と垂直方向の摩擦を別々に設定出来るように
- @Shiyo9 さんに「しよ温泉宿」での改変実装をいただきました
- 1.1.0
- FloatingObjectで等方的なオブジェクトをサポート
- 1.0.0
License
Zlib License