Better AvatarPedestal - mimyquality/FukuroUdon GitHub Wiki
概要
通常アバターペデスタルはアバターサムネイルの板ポリが追加表示されます。
この Prefab を使うと、アバターサムネイルを表示させることなくアバターチェンジさせるスイッチが作れます。
あとはそのアバターの3Dモデルを追加してやれば、3Dモデルの見た目をしたアバターペデスタルが作れる、という寸法です。
[!WARNING] 他作アバターモデルを使用する場合は、ペデスタル化を含め、アバターの利用規約で許可された使い方か注意してください。
導入手順
使い方
-
Packages > Fukuro Udon > Samples > BetterAvatarPedestal フォルダーから BetterAvatarPedestal_sample プレハブを Hierarchy にD&Dします。
-
Hierarchy に置いたプレハブの中にある AvatarPedestal(scale0) オブジェクトの
VRC Avatar Pedestalの Blueprint Id に、着替えさせたいアバターの Blueprint ID を記入してください。自身がアップロードしたアバターの Blueprint ID は、VRCSDK コントロールパネルの Content Manager タブからコピーできます。アバターの公開設定が public である必要があります。
このオブジェクトは非アクティブのままにしておいてください。 -
プレハブ内にある AvatarModel オブジェクトの子としてアバターのモデルを追加してください。
アバターとしてアップロード出来るようセットアップされたアバターは、そのままではワールドプロジェクトに持ち込むことができません。アバタープロジェクトの方で一度 Manual Bake したり、
VRC Avatar Descriptor始めとするワールドプロジェクトでは使えないコンポーネントを全てそぎ落としてから、ワールドプロジェクトに持ち込みましょう。 -
アバターモデルに合わせて、BetterAvatarPedestal_sample オブジェクトにある
Capsule Colliderの大きさを調整してください。
不要であれば、台座モデル (VRC_pedestal_udon オブジェクト) は削除してアバターモデルだけにする事も出来ます。
[!TIP] ペデスタルのインタラクト判定のアウトライン(水色のアレ)をモデルの輪郭に合わせたい場合、以下を満たす必要があります。
- モデルが
Mesh Rendererである (SkinnedMesh Rendererでない)- モデルの
Batching Staticがオフになっている軽量化にもなるため、展示するモデルには以下のツールなどを使い、Mesh Renderer 化することをオススメします。
https://booth.pm/ja/items/1433818つまり、どうしてもボーンやブレンドシェイプアニメーションを入れたい場合、アウトラインはコライダー形状で妥協する事になります。
VRChat 内の操作
このギミックはワンクッション置くために、アバターペデスタルをインタラクトするとメニューが表示され、メニューから Yes をインタラクトすることでアバターに着替えるようになっています。
Prefab 内の DialogBox オブジェクトがメニュー本体なので、必要に応じていったんアクティブにして位置調整してから、また非アクティブにしておいてください。
高度な使い方
アバターギミックからワールドへの転用を少しでも楽にするための補助ギミックを用意しています。
制約上 VRC Avatar Parameter Driver 等の再現が困難なため、シンプルな機構のものに限られます。
Animator Parameter Sync もあります。
Dynamics Parameter Transfer
Animator の付いたオブジェクトに付けると、子孫オブジェクトにある全ての Physbone と Contact Receiver を走査し、それぞれの状態をパラメーターとして Animator に渡します。Animator Controller とパラメーター名、型が一致するように名付けに注意してください。
アバターのものと違いパラメーター名を決める項目が無いため、オブジェクト名で代替しています。原則1オブジェクト1コンポーネントとして名付けるようにしてください。
また、Contact Receiver には仕様上 Contact Receiver Infomation を追加で付ける必要があります。このコンポーネントの [Setup Contacts in Children] ボタンを実行することで、子孫オブジェクトにある全ての Contact Receiver に Contact Receiver Infomation コンポーネントを追加してくれます。
- Physbone
{オブジェクト名}_IsGrabbed[Bool] : この Physbone が掴まれている間 true{オブジェクト名}_IsPosed[Bool] : この Physbone が固定されている間 true{オブジェクト名}_Angle[Float] : この Physbone の曲げ角。0°~180° が 0.0~1.0 に換算されます{オブジェクト名}_Stretch[Float] : この Physbone の伸び量。最大値に対する割合として 0.0~1.0 に換算されます{オブジェクト名}_Squish[Float] : この Physbone の縮み量。最大値に対する割合として 0.0~1.0 に換算されます
パラメーターの詳細は公式ドキュメントを参照ください。
https://vrc-beta-docs.netlify.app/common-components/physbones/#options
- Contact Receiver
{オブジェクト名}_Constant[Bool] : この Contact Receiver に一つ以上の Contact Sender が接触中の場合 true{オブジェクト名}_OnEnter[Bool] : この Contact Receiver に Contact Sender が Min Velocity の速度以上で接触した時に1フレームだけ true{オブジェクト名}_Proximity[Float] : この Contact Receiver に最接近している Contact Sender との近接度合い。Radius 半径表面以遠を 0.0 ~ Receiver 中心を 1.0 として換算されます
[!IMPORTANT] アバターのものと違い、Animator Controller にパラメーターを用意しておけば Constant, OnEnter, Proximity を一つの Contact Receiver で同時に取得できますが、Physbone のようにこれらの接尾辞を付ける必要があります。
パラメーターの詳細は公式ドキュメントを参照ください。
https://vrc-beta-docs.netlify.app/common-components/contacts/#receiver
Contact Receiver Infomation
仕様上ワールドの Contact Receiver はパラメーターを直接持たないため、パラメーター化するための補助コンポーネントです。
Dynamics Parameter Transfer に Contact Receiver のパラメーターを拾わせるために必須です。
このコンポーネント単体でも他の Udon スクリプトから以下のメソッド・プロパティを呼び出して、Contact Receiver のパラメーターをシンプルに取り出す使い方ができます。
| 返り値 | 名前 | 説明 |
|---|---|---|
| ContactSenderProxy[] | Senders | この Contact Receiver が接触中の Contact Sender の配列を取得します |
| bool | Constant | この Contact Receiver に一つ以上の Contact Sender が接触中の場合 true |
| bool | OnEnter | HasStayedSender() のプロパティ版です |
| float | Proximity | CalculateProximity() のプロパティ版です |
| bool | HasStayedSender() | この Contact Receiver に一つ以上の Contact Sender が接触中の場合 true |
| float | CalculateProximity() | この Contact Receiver に最接近している Contact Sender との近接度合い。Receiver の 半径表面 0.0~1.0 中心 として換算されます |
| float | CalculateProximity(VRCContactSender) | 引数の Contact Sender との近接度合いを返します |
| float | CalculateProximity(ContactSenderProxy) | 引数の Contact Sender との近接度合いを返します |
型の詳細は公式ドキュメントを参照ください。
https://vrc-beta-docs.netlify.app/common-components/contacts/#udon-access-in-worlds