UdonWearのつかいかた(v0.10.1以前)

UdonWearはUdonで書かれたVRChatワールド用のギミックです。 ボーンが入っている服のモデルにUdonWearを組み込むと、着られるギミックとしてワールドに置けるようになります。

sandman.booth.pm

僕がギミック担当で参加させてもらったVRoid Fashion Mallでも使用しました。VRoid Fashion Mallの様子をききょうパンダさんが動画にまとめてくださったので、こちらを見てもらうとどういうものか分かると思います。

www.youtube.com

このドキュメントではボーンが入った服のモデルはすでに用意していると仮定して、その服のモデルにUdonWearを組み込んでワールドに置く作業を順番に説明します。

服は持ってないけどUdonWearがどんなものかとりあえず試してみたい方は、UdonWearにはサンプルのViviClothesが入っているのでそちらを使ってください。

!!!!注意!!!!

服のモデルを組み込んだワールドをVRChatにアップロードすることはその服のモデルの利用規約に違反する場合があります。特に個人が利用するアバターに付属させた状態でアップロードすることは許可されていても、UdonWearギミックのように不特定多数のユーザーが使用できる状態でアップロードすることは禁止されている場合があります。アップロードする前に必ず利用規約を確認し、アップロード可能か不明な場合は作者さんに確認を取るなど適切な対応をしてください。

ボーンが入った服のモデルの作成方法のひとつとして、とも屋さんの羅生門ツールの下人モードを使ってVRoid Studioで作ったアバターモデルから服のモデルを取り出す方法があります。詳しくはこちらのリンクを参照してください。

tomo-shi-vi.hateblo.jp

すでに服のモデルのプレハブを持っていて、それを使いたい方は、ボーンのルートがヒエラルキーの一番上の親になっておらず、一番上の親のひとつ下の子になっていることを確認してください。もしそうなっていなければ、そうなるように修正してください。

f:id:sandman73773941:20210228222812p:plain
OKな例。ボーンのルートであるRootが一番の上の親であるViviClothesのひとつ下の子になっている。

f:id:sandman73773941:20210228223133p:plain
ダメな例。ボーンのルートであるRootが一番上の親になってしまっている。

また、服のモデルはT字ポーズになっている必要があります。T字ポーズになっていない場合は修正してください。

f:id:sandman73773941:20210228223709p:plain
OKな例。T字ポーズになっている。

f:id:sandman73773941:20210228223742p:plain
誤った例。T字ポーズになっていない。

服のボーンの回転によってはUdonWearがうまく組み込めない場合があります。可能であれば、T字ポーズにさせたときに各ボーンの回転がidentityになるようにしてください。

UdonWearを組み込む

VRChat SDK3(アバター用のものではなく、ワールド用のもの)とUdonSharpがインポート済みのUnityのプロジェクトを用意します。

UdonSharpはこちらのリンクから最新のリリース(Pre releaseではなくLatest releaseです)をダウンロードしてください。

github.com

なお、VRChat SDK3をインポートしてからUdonSharpをインポートするように注意してください。

Unityプロジェクトを開いて、Assets ー> Import Package -> Custom PackageでUdonWearのパッケージをインポートします。

インポートが終わったら、Window -> UdonWear Editorを選択してUdonWearのエディタウィンドウを開きます。

f:id:sandman73773941:20210228174253p:plain
UdonWear Editorを開く
f:id:sandman73773941:20210425170445p:plain
UdonWearのエディタウィンドウを開いた直後の状態

いきなりエラーが出ていますが、これは服のモデルをまだ指定していないからです。服のモデルのプレハブをTarget Clothesにドラッグドロップします。(服のモデルを用意していない場合は、Sampleディレクトリにお試し用の服モデル「ViviClothes」を置いてあるのでそちらを使ってください)

そうするとエラーが消えて各種項目が表示され、Createボタンが押せるようになります。

f:id:sandman73773941:20210425170536p:plain
TargetClothesを指定した状態

Createボタンを押して、シーンにUdonWearが組み込まれた服のギミックを置きます。この時、ヒエラルキー内のTransformを選択しておくと、そのTransformの場所にそのTransformの子要素として置きます。選択しなかった場合はSceneの原点に置きます。

f:id:sandman73773941:20210425184214p:plain
出したい場所のTransformを指定する

f:id:sandman73773941:20210425184230p:plain
Createボタンを押すとシーンにUdonWearが組み込まれた服が置かれる

VRChatSDKのWindowでBuild & Testを押して動作確認します。服がうまくアバターに追従していれば完了です。

服がうまくアバターに追従してくれない場合

服モデルをアバターに追従させるためには、服モデルに設定されている各関節ボーンそれぞれについて対応するギミックの関節ボーンを対応付ける必要があります。UdonWearのエディタがある程度自動でこの対応付けを設定するようになっていますが、服の関節ボーンに付いている名前によってはうまくいかない場合があります。うまくいかない場合は、手作業で対応付けする必要があります。

ここではCC0で公開されているP StoreのPOPPOさんP_Store_series_12を使って説明します。緩いライセンスで素晴らしい服のモデルを公開してくださっているPOPPOさんに感謝します。

f:id:sandman73773941:20210425225126p:plain
腕のボーンが正しく追従していない例

f:id:sandman73773941:20210425225925p:plain
腕のボーン(LeftUpperArm、LeftLowerArm、RightUpperArm、RightLowerArm)が正しく設定されていない

服のプレハブを開き、Hierarchyウィンドウから追従させたい服の関節ボーンを対応するUdonWearEditor上のフィールドにドラッグドロップすると設定できます。

f:id:sandman73773941:20210426002942p:plain
服のプレハブを開いて関節ボーンの設定をする(Left arm、Left elbow、Right arm、Right elbowがUdonWearEditorで設定されていない)

f:id:sandman73773941:20210426003018p:plain
設定された状態

他にも設定されていないボーンがありますが、服モデルにそもそも存在しないボーンや追従させる必要のないボーンは設定する必要はありません。

f:id:sandman73773941:20210426004826p:plain
正しく追従するようになった状態

UdonWearのマテリアル設定

UdonWearには服のマテリアルを切り替える機能があります。この機能を使っていわゆる服のカラバリを設定できます。Materialsタブでこの設定を行います。 現状、切り替えられるマテリアルはひとつです。

f:id:sandman73773941:20210506183353p:plain

設定する手順は以下のとおりです。

  1. TargetSkinnedMeshRendererNameで切り替えたいマテリアルを使用しているSkinnedMeshRendererの名前を指定してください。

  2. TargetMaterialIndexで切り替えたいマテリアルを指定してください。

  3. MaterialNumで切り替えられるマテリアルの種類の数を設定します。デフォルトは3に設定しています。

  4. InitialMaterialIndexでどのマテリアルを最初に使用するかを指定します。

  5. 切り替える別のマテリアルをmaterials[1]やmaterials[2]にドラッグドロップしてください(図中ではmaterial[1]にc12を設定しています)。なお、material[0]は服のプレハブで設定されているマテリアルが自動で設定されます。設定されていないマテリアル(図中ではmaterial[2])は単に無視されます。

これでCreateすると右上のMaterialボタンでマテリアルを切り替えられるようになります。

f:id:sandman73773941:20210506190019p:plain

UdonWearのオプション設定

UdonWearのエディタウィンドウにはTarget Clothes以外にもオプションがあります。

f:id:sandman73773941:20210425215509p:plain
音声とその他のオプション

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パッケージにはいくつかのおまけが付属しています。必要に応じて活用してください。

ギミックの説明用ポスター

f:id:sandman73773941:20210506190147p:plain f:id:sandman73773941:20210506190203p:plain

UdonWearギミックの説明用ポスターです。UdonWear/Prefabs/Textures にあります。調整パネルとDetachのためのポスターがあります。どちらもライセンスはCC0です。これらは東京アザラシセンターのあざらしうむさんが作成してくれました。感謝します。

試着室のモデル

シンプルな試着室のモデルです。このモデルのライセンスはCC0です。これもあざらしうむさんが作成してくれました。大変感謝します。

UdonWear用の拡張メニュー

f:id:sandman73773941:20210506172256p:plain

プレハブはUdonWear/Prefabs/UdonWearExtraMenu.prefab です。 VRChatのメニュー呼び出しで一緒に表示されるUdonWear用の拡張メニューです。Detachのやりかたの説明とDetachボタンが付属しています。

位置はどこでもいいのでSceneの中に置いてください。 Sceneに置いたUdonWearExtraMenuのUdonBehaviourコンポーネントのUdonWearRootTransformに、UdonWearの入った服(画像中ではViviClothes)を子要素以下の要素(つまり孫要素やひ孫要素でもOK)として含むTransform(画像中ではUdonWearRoot)を指定してください。含まれているUdonWearについてDetachボタンでDetachできるようになります。 f:id:sandman73773941:20210506155622p:plain

EmergencyDetachButton

f:id:sandman73773941:20210506190412p:plain

プレハブはUdonWear/Prefabs/EmergencyDetachButton.prefab です。 Interactすることで服をDetachできるボタンです。UdonWear用の拡張メニューと同様に、UdonBehaviourコンポーネントのUdonWearRootTransformに、UdonWearの入った服(画像中ではViviClothes)を子要素以下の要素(つまり孫要素やひ孫要素でもOK)として含むTransform(画像中ではUdonWearRoot)を指定してください。含まれているUdonWearについてこのボタンをInteractすることでDetachできるようになります。