UdonWearはUdonで書かれたVRChatワールド用のギミックです。 ボーンが入っている服のモデルにUdonWearを組み込むと、着られるギミックとしてワールドに置けるようになります。
僕がギミック担当で参加させてもらったVirtual Fashion Mallでも使用しました。その様子をききょうパンダさんが動画にまとめてくださったので、こちらを見てもらうとどういうものか分かると思います。
このドキュメントではボーンが入った服のモデルはすでに用意していると仮定して、その服のモデルにUdonWearを組み込んでワールドに置く作業を順番に説明します。
v0.10.1以前のUdonWearのドキュメントについてはこの記事ではなく、こちらの記事を参照してください。
服は持ってないけどUdonWearがどんなものかとりあえず試してみたい方は、UdonWearにはサンプルのViviClothesが入っているのでそちらを使ってください。
!!!!注意!!!!
服のモデルを組み込んだワールドをVRChatにアップロードすることはその服のモデルの利用規約に違反する場合があります。特に個人が利用するアバターに付属させた状態でアップロードすることは許可されていても、UdonWearギミックのように不特定多数のユーザーが使用できる状態でアップロードすることは禁止されている場合があります。アップロードする前に必ず利用規約を確認し、アップロード可能か不明な場合は作者さんに確認を取るなど適切な対応をしてください。
ボーンが入った服のモデルの作成方法のひとつとして、とも屋さんの羅生門ツールの下人モードを使ってVRoid Studioで作ったアバターモデルから服のモデルを取り出す方法があります。詳しくはこちらのリンクを参照してください。
すでに服のモデルのプレハブを持っていて、それを使いたい方は、ボーンのルートがヒエラルキーの一番上の親になっておらず、一番上の親のひとつ下の子になっていることを確認してください。もしそうなっていなければ、そうなるように修正してください。
また、服のモデルはT字ポーズになっている必要があります。T字ポーズになっていない場合は修正してください。
服のボーンの回転によってはUdonWearがうまく組み込めない場合があります。可能であれば、T字ポーズにさせたときに各ボーンの回転がidentityになるようにしてください。
UdonWearを組み込む
VRChat SDK3(アバター用のものではなく、ワールド用のもの)とUdonSharpがインポート済みのUnityのプロジェクトを用意します。
UdonSharpはこちらのリンクから最新のリリース(Pre releaseではなくLatest releaseです)をダウンロードしてください。
なお、VRChat SDK3をインポートしてからUdonSharpをインポートするように注意してください。
Unityプロジェクトを開いて、Assets ー> Import Package -> Custom PackageでUdonWearのパッケージをインポートします。
インポートが終わったら、Window -> UdonWear Editorを選択してUdonWearのエディタウィンドウを開きます。
Create New Settingsを押してUdonWearの設定を保存するSettingsファイルを作成します。衣装ごとにSettingsファイルを分けておくと、後でSettingsを指定することで衣装ごとに一括で設定を読み込むことができます。
Settingsファイルは適当な場所に保存してください。Settingsファイルを作成すると、UdonWearエディターウィンドウのSettingsに自動でそのファイルがセットされます。
いきなりエラーが出ていますが、これは服のモデルをまだ指定していないからです。服のモデルのプレハブをTarget Clothesにドラッグドロップします。(服のモデルを用意していない場合は、Sampleディレクトリにお試し用の服モデル「ViviClothes」を置いてあるのでそちらを使ってください)
まだエラーが出ていますが、これはボーンの対応付けを設定していないからです。Auto Find Clothes Bone Transform Namesボタンを押してください。このボタンを押すことで自動でボーンの対応付けを行います。ここで対応付けがうまくいかない場合は「服がうまくアバターに追従してくれない場合」を参照してください。
そうするとエラーが消えて各種項目が表示され、Create Instanceボタンが押せるようになります。
Create Instanceボタンを押して、シーンにUdonWearが組み込まれた服のギミックを置きます。この時、ヒエラルキー内のTransformを選択しておくと、そのTransformの場所にそのTransformの子要素として置きます。選択しなかった場合はSceneの原点に置きます。
VRChatSDKのWindowでBuild & Testを押して動作確認します。服がうまくアバターに追従していれば完了です。
服がうまくアバターに追従してくれない場合
服モデルをアバターに追従させるためには、服モデルに設定されている各関節ボーンそれぞれについて対応するギミックの関節ボーンを対応付ける必要があります。UdonWearのエディタがある程度自動でこの対応付けを設定するようになっていますが、服の関節ボーンに付いている名前によってはうまくいかない場合があります。うまくいかない場合は、手作業で対応付けする必要があります。
ここではCC0で公開されているP StoreのPOPPOさんのP_Store_series_12を使って説明します。緩いライセンスで素晴らしい服のモデルを公開してくださっているPOPPOさんに感謝します。
服のプレハブを開き、Hierarchyウィンドウから追従させたい服の関節ボーンを対応するUdonWearEditor上のフィールドにドラッグドロップすると設定できます。
他にも設定されていないボーンがありますが、服モデルにそもそも存在しないボーンや追従させる必要のないボーンは設定する必要はありません。
カラーバリエーション設定
UdonWearには服のカラーバリエーションを切り替える機能があります。
TargetClothes 1, Target Clothes 2に切り替えたい服を設定してください。
UdonWearのオプション設定
UdonWearのエディタウィンドウにはTarget Clothes以外にもオプションがあります。
Advanced mode is default
ここにチェックをつけると、調整パネルでAdvancedにチェックが付いた状態をデフォルトにします。
DetachRefHeightOffset
VRモードで脱ぐときに両トリガーを押す基準位置の高さを設定します。0でプレイヤーの頭の位置の高さと等しくなります。デフォルトは-0.4で、肩辺りの高さが基準になるようにしています。これでT字ポーズの状態で両トリガーを押すと脱ぐという操作になります。
ClothesName
調整パネルに表示される服の名前を設定します。デフォルトではTargetClothesの名前が設定されます。
Attach Sound
服を着たとき(=服ギミックをアバターに取り付けたとき)の効果音を設定します。
Detach Sound
服を脱いだとき(=服ギミックをアバターから取り外したとき)の効果音を設定します。
Reset Sound
調整した値をリセットしたときの効果音を設定します。
ChangeMaterial Sound
マテリアルを切り替えたときの効果音を設定します。
Close Sound
調整パネルを閉じたときの効果音を設定します。
Proxymity
服ギミックのコライダーにインタラクトできる距離を設定します。
ResetTransformThreshold
UdonWearはある服ギミックを最後に触ったプレイヤーがその服ギミックから一定時間離れた状態で一定時間が経過すると服ギミックのTransformをリセットします。この項目ではその設定を行います。
Distance
ここで設定した距離以上離れると時間のカウントを開始します。
Sec
リセットされるまでの秒数を設定します。
CloseEditorPanelDistance
ここで設定した距離以上プレイヤーが調整パネルから離れるとUdonWearは調整パネルを閉じます。
ArmAngle
ここで設定した角度でUdonWearが服のポーズの初期化時にUpperArmボーンを回転させます。特にこの値が70度くらいに設定すると服は着られていないときにA字ポーズの状態になります。この値を0に設定すると服がT字ポーズの状態になります。この値を変えてもScene上では服はT字ポーズで置かれることに注意してください。UdonWearが実行時に設定された角度分回転させます。
その他のおまけ
UdonWearパッケージにはいくつかのおまけが付属しています。必要に応じて活用してください。
ギミックの説明用ポスター
UdonWearギミックの説明用ポスターです。UdonWear/Prefabs/InstructionTextures
にあります。どれもライセンスはCC0です。これらは東京アザラシセンターのあざらしうむさんが作成してくれました。感謝します。
試着室のモデル
シンプルな試着室のモデルです。このモデルのライセンスはCC0です。これもあざらしうむさんが作成してくれました。大変感謝します。
UdonWear用の拡張メニュー
プレハブはUdonWear/Prefabs/UdonWearExtraMenu.prefab
です。
VRChatのメニュー呼び出しで一緒に表示されるUdonWear用の拡張メニューです。Detachのやりかたの説明とDetachボタンが付属しています。
位置はどこでもいいのでSceneの中に置いてください。 Sceneに置いたUdonWearExtraMenuのUdonBehaviourコンポーネントのUdonWearRootTransformに、UdonWearの入った服(画像中ではViviClothes)を子要素以下の要素(つまり孫要素やひ孫要素でもOK)として含むTransform(画像中ではUdonWearRoot)を指定してください。含まれているUdonWearについてDetachボタンでDetachできるようになります。
EmergencyDetachButton
プレハブはUdonWear/Prefabs/EmergencyDetachButton.prefab
です。
Interactすることで服をDetachできるボタンです。UdonWear用の拡張メニューと同様に、UdonBehaviourコンポーネントのUdonWearRootTransformに、UdonWearの入った服(画像中ではViviClothes)を子要素以下の要素(つまり孫要素やひ孫要素でもOK)として含むTransform(画像中ではUdonWearRoot)を指定してください。含まれているUdonWearについてこのボタンをInteractすることでDetachできるようになります。
調整パネルの日本語/英語切り替えシステム
プレハブはUdonWear/Prefabs/UdonWearLanguageSelector.prefab
です。
調整パネルの言語はデフォルトでは英語ですが、このプレハブをSceneに置くことでプレイヤーのタイムゾーンに応じて日本語と英語を自動で切り替えるようになります。
位置はどこでもいいのでSceneの中に置くだけで有効になります。
服のスケールと位置のキャッシュシステム
プレハブはUdonWear/Prefabs/UdonWearOffsetCache.prefab
です。
プレイヤーが着た後服のスケールや位置を調整する手間を減らすための機能です。プレイヤーがまだ一度も着たことのない服を着た場合に、最後に着た別の服で調整したスケールや位置をデフォルトの値として設定します。
位置はどこでもいいのでSceneの中に置くだけで有効になります。
服によってはキャッシュを無効にしたいことがあるかもしれません。その場合はCreateして出したUdonWearのオブジェクトのUdonBehaviourコンポーネントの「IsOffsetCacheEnabledIfAvailable」のチェックを外してください。