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

VRChatにおけるUnityレイヤー

Layersは、UnityにおいてGame Objectを整理し、Game Object間のcollisionsRaycastsを決定したり、シーンの一部を選択的にrenderしたりするために使用されます。

VRChatのワールドでは、ほとんどのレイヤーを自由に使用できます。 一部のレイヤーはUnityとVRChatで共有され、使用されます。

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

レイヤー22から31は、Unityの「User」レイヤーであり、使用されていません。これらは自由に変更でき、ワールドのビルドおよびアップロード時に変更が破棄されることはありません。

Unityの組み込みレイヤー

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

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

ステッカー

ステッカーを使用すると、VRChat+ ユーザーはワールド内の Collider コンポーネントに画像を配置できます。

ステッカーはすべてのレイヤーに配置できるわけではありません。Collider コンポーネントにユーザーがステッカーを配置できないようにしたい場合は、そのレイヤーを変更してください。VRChatやUnityで使用されていないレイヤー8("Interactive")を使用することをお勧めします。

ワールド全体でステッカーを許可したくない場合は、VRChatウェブサイトでワールドを編集し、ステッカーを無効にしてください。

物理演算とレイヤー

Physics操作を使用する際は、予約済みレイヤー(Reserved layers)上のオブジェクトを避けるため、テスト対象のレイヤーを限定するのがベストです。また、Physicsの呼び出しから返されたオブジェクトに対して Utilities.IsValid を使用することをお勧めします。これにより、誤って「保護された」オブジェクトを取得してしまうことを防げます。保護されたオブジェクトを取得すると null が発生し、UdonBehaviourが停止する可能性があります。

以下のPhysicsメソッドは `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レイヤーによってブロックされます。以下のレイヤーはインタラクションに対して透過的であり、それらを通り抜けてインタラクションを行うことが可能です。

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

デフォルトでは、ユーザーレイヤーを介したインタラクションはブロックされます。インタラクションを透過させたい(インタラクションが通り抜けることを許可したい)レイヤーを指定するには、"Interact Passthrough" マスクを使用してください。なお、衝突判定用レイの発生源は、デスクトップ/モバイルプレイヤー(プレイヤーカプセル内)と、VRプレイヤー(ユーザーのトラッキングされた手)で異なります。そのため、VRプレイヤーは自身のプレイヤーコライダーがブロックされている状況でも、手を使ってコライダーに侵入することが可能です。結果として、手そのものがコライダーに侵入しているため、そのコライダーはVRプレイヤーからのインタラクションをブロックしなくなります。


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

最終更新: