VRChat 非公式日本語ドキュメント

VRChatにおけるUnityレイヤー

レイヤーはUnityにおいて、ゲームオブジェクトの整理、ゲームオブジェクト間のコリジョン(衝突判定)レイキャストの決定、シーンの一部を選択的なレンダリングなどを行うために使用されます。

VRChatワールド内のほとんどのレイヤーは自由に使用できます。一部のレイヤーはUnityとVRChatの両方で共有・使用されています。

VRChatのWorlds SDKを使用してUnityプロジェクトを作成すると、VRChatの組み込みレイヤーを使用するようにプロジェクトが自動的に設定されます。コリジョンマトリックスを変更したり、組み込みレイヤーの名前を変更または削除したりした場合、ワールドをVRChatにアップロードするとそれらの変更は上書きされます。

レイヤー22~31は、Unityで使用されていない「User」レイヤーです。これらは自由に変更可能であり、ワールドのビルドやアップロードを行っても、これらのレイヤーへの変更が破棄されることはありません。

Unityの組み込みレイヤー

以下の表は、Unityの組み込みレイヤー、VRChatでの使用方法、およびユーザーがステッカーを配置できるかどうかをまとめたものです。

レイヤー番号レイヤー名説明ステッカー配置可能
0DefaultUnityのゲームオブジェクトのデフォルトとして使用されます。VRChatのアバター台座で使用されます。
1TransparentFXUnityのフレアアセットで使用されます。
2IgnoreRaycastレイヤーマスクが指定されていない場合、Unityの物理演算レイキャストからは無視されます。VRChatの物理演算レイキャストからは無視されません。
3Itemユーザーがワールドに配置したVRChatアイテムで使用されます。ワールドをアップロードする際、このレイヤーにあるゲームオブジェクトはすべてレイヤー0(Default)に移動されます。
4WaterUnityのStandard Assetsで使用されます。VRChatのポータルで使用されます。VRChatのミラーで使用されます。Unityのポストプロセッシングで頻繁に使用されます。
5UI⚠ このレイヤーの使用は避けた方が賢明です。UnityのUIのデフォルトとして使用されます。プレイヤーがVRChatメニューを開いている場合を除き、VRChatのUIポインターからは無視されます。カメラで「UI」が有効になっていない限り、VRChatのカメラからは無視されます。
6reserved6⚠ このレイヤーの使用は避けてください。VRChat用に予約されています。ワールドをアップロードする際、予約済みレイヤーにあるゲームオブジェクトはすべてレイヤー0(Default)に移動されます。
7reserved7⚠ このレイヤーの使用は避けてください。VRChatによって予約されています。ワールドをアップロードすると、予約済みレイヤーにあるすべてのゲームオブジェクトはレイヤー0(Default)に移動されます。
8InteractiveUnityおよびVRChatでは使用されていません。
ユーザーにステッカーを配置させたくないコライダーに対して、このレイヤーを使用してください。
9Playerローカルプレイヤー以外のVRChatプレイヤーに使用されます。
10PlayerLocalローカルプレイヤーを描画するためにVRChatで使用されます。ヒューマノイドアバターは、頭のボーンが表示されない状態で描画されます。
11EnvironmentUnityおよびVRChatでは使用されていません。
12UiMenu⚠ このレイヤーの使用は推奨しません。プレイヤーがVRChatメニューを開いている場合を除き、VRChatのUIポインターによって無視されます。
13PickupPickupコンポーネントを追加した際、VRChatのPickupによってデフォルトで使用されます。プレイヤーとは衝突しません。
14PickupNoEnvironmentこのレイヤーのコライダーは、「Pickup」レイヤーのオブジェクトとのみ衝突します。
15StereoLeftUnityおよびVRChatでは使用されていません。
16StereoRightUnityおよびVRChatでは使用されていません。
17Walkthroughこのレイヤーのコライダーは、プレイヤーと衝突しません。
18MirrorReflectionVRChatがミラー内にローカルプレイヤーを描画するために使用します。
このレイヤー上のレンダラーは、ミラー内にのみ表示されます。
このレイヤー上のレンダラーは、VRChatのメインカメラには描画されません。
このレイヤー上のコライダーは、VRChatのレイキャストを遮断しません。
19InternalUI⚠ このレイヤーの使用は避けてください。メニュー、ネームプレート、デバッグパネルといったVRChatの内部UI要素に使用されます。
20HardwareObjects⚠ このレイヤーの使用は避けてください。コントローラーやトラッカーなど、ゲーム内の物理ハードウェアの仮想表現を描画するためにVRChatが使用します。
21reserved4⚠ このレイヤーの使用は避けてください。VRChatによって予約されています。ワールドをアップロードする際、予約されたレイヤー上のゲームオブジェクトはレイヤー0(Default)に移動されます。
22-30UnityおよびVRChatでは使用されません。アップロードされたワールドにおいて、VRChatはこれらのレイヤーの名前や衝突行列(コリジョンマトリックス)を上書きすることはありません。(✔)1
31⚠ このレイヤーの使用は避けてください。Unityエディターのプレビューウィンドウの仕組みで使用されます。(✔)1

Stickers

Stickersを使用すると、VRChat+ユーザーはワールド内のColliderコンポーネントに画像を配置できるようになります。

Stickersはすべてのレイヤーに配置できるわけではありません。ColliderコンポーネントへのStickersの配置を許可したくない場合は、そのレイヤーを変更してください。VRChatおよびUnityで使用されていないレイヤー8("Interactive")を使用することを推奨します。

Stickersをどこにも配置させたくない場合は、VRChatウェブサイト上でワールドを編集し、Stickersを無効にしてください。

物理演算とレイヤー

物理演算処理を使用する際は、予約済みレイヤー上のオブジェクトを避けるため、判定対象となるレイヤーを制限してください。また、Physicsの呼び出しから返されたオブジェクトに対してUtilities.IsValidを使用することをお勧めします。これにより、誤って「保護」されたオブジェクト(nullとなり、UdonBehaviourを停止させる可能性があります)を取得していないことを確認できます。

これらの物理演算メソッドは以下と組み合わせるのが最適です。IsValid
  • Physics.Raycast – レイ(光線)を飛ばし、最初に衝突したものを返します。
  • Physics.RaycastAll – レイ上ですべての衝突を返します。
  • Physics.RaycastNonAlloc – 事前に割り当てられた配列を使用して結果を格納し、ガベージコレクションを削減します。
  • Physics.SphereCast – Raycastと同様ですが、より広い検出範囲を持つ球体を使用します。
  • Physics.SphereCastAll – 球体を使用して、すべてのヒット結果を返します。
  • Physics.SphereCastNonAlloc – 事前に割り当てられた配列を使用する最適化されたバージョンです。
  • Physics.OverlapSphere – 球体内のすべてのコライダーを返します。
  • Physics.OverlapBox – ボックス内のすべてのコライダーを返します。
  • Physics.OverlapCapsule – カプセル内のすべてのコライダーを返します。
  • Physics.OverlapSphereNonAlloc – 事前に割り当てられた配列を使用する最適化されたバージョンです。
  • Physics.OverlapBoxNonAlloc – 同上ですが、ボックス用です。
  • Physics.OverlapCapsuleNonAlloc – 同上ですが、カプセル用です。
  • Rigidbody.SweepTest – Rigidbodyが指定された方向に何かに衝突するかどうかを確認します。
  • Rigidbody.SweepTestAll – Rigidbodyの経路上のすべてのヒット結果を返します。
  • Physics.CapsuleCast – カプセルを指定した方向にキャストし、最初のヒットを検出します。
  • Physics.CapsuleCastAll – カプセルを使用して、すべてのヒット結果を返します。
  • Physics.CapsuleCastNonAlloc – 事前に割り当てられた配列を使用する最適化されたバージョンです。
  • Physics.BoxCast – ボックスをキャストし、最初にヒットしたものを検出します。
  • Physics.BoxCastAll – ボックスを使用して、ヒットしたすべてを返します。
  • Physics.BoxCastNonAlloc – 事前に割り当てられた配列を使用する最適化バージョンです。
  • Collider.Raycast – 単一のコライダーに対してレイをキャストします。
  • Physics.CheckSphere – 球体がコライダーと重なっているかを確認します。
  • Physics.CheckBox – ボックスがコライダーと重なっているかを確認します。
  • Physics.CheckCapsule – カプセルがコライダーと重なっているかを確認します。

VRChatレイヤーにおけるインタラクションのブロックとパススルー

インタラクション(遠くからアイテムを掴む、レーザーでUI要素を切り替えるなど)は、ほとんどのVRChatレイヤーによってブロックされます。以下のレイヤーはインタラクションに対して透過的であり、それらを通してインタラクトすることが可能です:

  • UiMenu
  • UI
  • PlayerLocal
  • MirrorReflection

ユーザーレイヤーのインタラクション・パススルー

ユーザーレイヤーを通じたインタラクションは、デフォルトでブロックされています。「Interact Passthrough」マスクを使用して、インタラクションを透過(インタラクションの通過を許可)させるレイヤーを定義してください。なお、衝突判定用レイ(光線)の発生源は、デスクトップ/モバイルプレイヤー(プレイヤーカプセル内)とVRプレイヤー(ユーザーのトラッキングされた手から)で異なります。つまり、VRプレイヤーは、プレイヤーのコライダーがブロックされている場合でも、手でコライダーを貫通させることが可能です。そのため、手が貫通している間、それらのコライダーはVRプレイヤーからのインタラクションをブロックしません。

脚注

  1. レイヤー22〜31は、デフォルトでStickersに対して有効になっています。これらをInteraction Passthroughリストに追加することで無効化できます。 2

最終更新: