アバターのスケーリングに関する技術的考慮事項
アバターのスケーリング機能により、プレイヤーは現在のアバターの身長を変更できます。
このページでは、コミュニティのリソース開発に役立つ範囲で、VRChatのアバターのスケーリングが内部でどのように動作しているかを解説します。
Udonでアバターのスケーリングを使用する方法については、Avatar Eventsのドキュメントまたはサンプルスクリプトを参照してください。 スケーリングに関連する利用可能なアバターパラメーターについては、Avatar Parametersのページを参照してください。
用語の定義
- Eye Height: Tポーズ時のアバターの視点の高さ(Transform positionのY成分)。
- Prefab Height: スケーリングがデフォルト値である時のアバターの目線の高さ。「View Position」を配置してSDKで設定する値です。
- Target Eye Height: プレイヤーまたはUdonによって設定された、アバターがスケーリングされるべき目線の高さ。
- Avatar Scale: 「Prefab Height」と「Target Eye Height」の比率。例えば、ターゲットが4.5メートル、Prefab Heightが1.5メートルの場合、「Avatar Scale」は3となります。
値の範囲
"Prefab Height" に制限はありません。SDK内では、アバターの "View Position" を任意の高さに設定できます。ただし、アバターの全体的なスケールはパフォーマンスランクに影響することに注意してください。
"Target Eye Height" は、Udonでは0.1メートルから100メートルの範囲に制限されており、Action Menuで使用可能なスケーリング範囲は0.2メートルから5.0メートルとなっています。しかし、この範囲外のアバターをアップロードし、スケールダイヤルを使用しないことで、これらの制限を超えることが可能です。その場合、"Target Eye Height" は "Prefab Height" と一致し、制限は適用されません。
この制限があるため、Udonでスケールを完全に適用するには、"avatar eye height changed" イベント発生時にスケールを再適用する必要があります。そうしなければ、ユーザーは背の低い、または高いアバターに切り替えることで、ワールド側が設けた制限を回避できてしまいます。
ウェブサイト経由でスケーリングが無効化されているワールドでは、"Target Eye Height" は常に "Prefab Height" と一致します。
スケールの適用方法
アバターのスケール調整は、アバターのルートトランスフォームの localScale を変更することで機能します。このスケールは強制的に適用されます。アバターのルートのスケールを上書きする方法として、ユーザーが操作可能な手段は、アバターのスケールに関連する Udon 関数以外には存在しません。
スケールが変更されるたび(アバターを切り替えたとき、あるいは現在のアバターをリセット/リロードしたときなど)、そのアバターはローカル環境で「再計測」されます。このプロセスにより、新しい身長に合わせて視点が調整され、音声の発生位置などの内部コンポーネントが再配置されます。
スケールは各プレイヤーに対して「目の高さ(eye height)」として自動的に同期され、小数点以下3桁に量子化されます。リモートのユーザーに対しては、新しい身長データが受信されるたびに、スケールの変更は短い時間をかけて滑らかに補間されます。
Action Menu のスケールダイアルを使用している間、アバターのスケールは鏡の中でのみ変更されます。ダイアルでスケールを確定すると、新しいスケールが即座にアバターへ適用され、リモートのユーザーへと送信されます。
最終更新: