アバターの移動とテレポートの構成
概要
Mesh アバターが移動し、エクスペリエンスでテレポートを正常に行うには、特定の設計ガイドラインに従う必要があります。 この記事では、移動とテレポート用にサーフェスを設定する方法、アバターの移動制限やコライダーの設計などのヒント、レイヤーに関する詳細なセクションについて説明します。
アバターの移動に関するガイダンス
アバターが歩いてテレポートを行うために、シーンにコライダーが必要です。 一般に、ビジュアル ジオメトリに厳密に適合する低ポリゴン メッシュ コライダーは、最適な結果を生成します。 Box コライダーは簡単なシナリオに適していますが、アバターがコーナーに立ち往生したり、ステップの高さの制限を破ったりするなど、いくつかの問題が発生する可能性があります。
メッシュ アバターの移動制限:
最大歩行可能勾配: <45度
最大ステップ高さ: 0.3
アバター カプセルの半径: 0.3
アバター カプセルの高さ: 2
アバターの高さ: 1.8
最適な結果を得るための提案:
アバターが歩くビジュアル サーフェスに衝突サーフェスを配置します。 これは、(浮動やクリッピングを防ぐために) ビジュアルサーフェスに対するアバターの位置に関する問題を回避するために重要です。
角を丸くすると、アバターの動きがスムーズになり、アバターが動けなくなります。
アバターの動きをブロックするには、急な斜面または最大ステップの高さよりもはるかに大きい高さを使用します。
コライダーの形状を変更して、アバターが移動するのが自然に困難または不可能なサーフェスを作成します。 たとえば、メッシュ コライダーは、アバターが立つ平坦な面や歩行可能な傾きを提供しない不規則な形状を使用します。
場合によっては、カプセルコライダーや同様の丸い形状のオブジェクトや領域でアバターが歩くべきではない場合があります。 傾斜が十分に急でアバターが滑り落ちると、これらの図形は歩けなくなります。
衝突レイヤー
対話可能なオブジェクトは、非トリガー コライダーを持つ GameObject であり、オブジェクトの衝突レイヤーの 1 つに対応するビジュアル ジオメトリです。 アバターは、トリガー以外のコライダーを持つオブジェクトに歩いて配置できるため、使用されているレイヤーに注意してください。
正確なアバターの配置とテレポートを行うためには、シーン コライダーが適切なレイヤー上にある必要があります。 ローカル ユーザーのアバターは、これらの相互作用をサポートするレイヤー上のすべてのコライダーと対話 (衝突して歩く) します。
アバターを配置またはテレポートするときは、アバターが "グラウンド" オブジェクトと衝突し、一貫して地上の同じ高さに配置することが重要です (これは "接地" と呼ばれます)。 地面が検出されない場合、アバターは落下します。 これは地上の場合は許容されますが (落下ダメージはありません)、アバターが "地面" オブジェクトの下に配置されている場合、アバターはそのオブジェクトとの衝突を登録できず、環境から落ちて再び生じる可能性があります。 位置変更中にアバターが地面に侵入すると、接地されます。
セッション内のすべてのアバターは、一貫した高さである必要があります。 アバターの位置は、その高さが範囲外に変化した場合に調整されます。 例:
VR ユーザーは、着座または立ち位置との間を物理的に移動します。 HMD の動きにより、シーン内のアバターが地面に侵入したり、他のアバターよりもはるかに高い垂直方向に立ったりします。
不適切に構成されたビジュアル スクリプトでは、アバターが収まらない位置または垂直方向に低すぎる位置にテレポートされます。
これが重要なもう 1 つの理由は、アバター物理が更新されると、アバターが接地されていない場合、そのカプセルが地面と衝突し、アバターを新しい位置にヤンクした結果、位置にジャンプするということです。 このような不自然な動きは吐き気を引き起こす可能性があるため、これはHMDユーザーにとって特に影響を与えます。
アバターが対話し、歩くことができるレイヤー:
0 - 既定値
2 - レイキャストを無視する
4 - 水(トリガーコライダーのみ許可され、ウォーク不可)
14 - GroundCollision (テレポート可能)
18 - TriggerVolume (トリガー コライダーのみが許可され、ウォーク不可)
21 - IgnoreObjects
26 - Custom26
27 - Custom27
28 - Custom28
29 - IgnoreRealtimeLight
30 - WallCollision
テレポートのサポート
シーンがテレポートをサポートするには、テレポート可能なサーフェス (床や地面など) に GroundCollision レイヤー上にコライダーが必要です。 他にもウォーク可能なレイヤーがありますが、テレポートできるのは GroundCollision のみです。 ビジュアル ジオメトリはテレポート可能ではなく、 GroundCollision レイヤー上に配置しないでください。そのレイヤーにはコライダーのみを使用できます。 階層化と衝突が不適切または矛盾していると、テレポートや地面の検出時に望ましくない影響が発生する可能性があります。
テレポート可能なサーフェスは、次の条件を満たしている必要があります。
- 何らかの種類の非トリガー コライダー (メッシュ コライダーやボックス コライダーなど) がアタッチされている必要があります。
- その レイヤー は GroundCollision に設定する必要があります。
低い天井やトンネルに注意してください。これらは、アバターの接地とテレポートに影響を与える可能性があります。 たとえば、アバターの物理学やテレポートアークは、それらの上のコライダーと交差または相互作用する可能性があります。 横断可能な領域の地上から屋根までの高さは、アバター カプセルの高さが 2m を超える必要があります。 特に屋根が平らではなく傾斜している場合は、アバターの頭の上にスペースの小さなバッファーが必要です。
移動物理学は、すべての参加者が対話可能なコライダーとスムーズにアバターの動きを提供し、アバターの衝突には小さすぎる領域の侵入を防ぎます。 しかし、不正な地面の衝突や、くさび形状や非常に狭いスペースなどの問題のある環境ジオメトリは、アバターやカメラが物体に侵入したり、動けなくなったりする可能性があります。 歩行可能でテレポート可能なすべてのサーフェスを徹底的にテストすることが不可欠です。
レイヤーの詳細
オブジェクト レイヤー
GameObject にトリガー以外のコライダーがある場合、オブジェクト レイヤーのいずれかに存在する場合は、他のオブジェクトと競合します。
0 - 既定値
2 - レイキャストを無視する
4 - 水 (トリガー コライダーのみ許可)
14 - GroundCollision
18 - TriggerVolume (トリガー コライダーのみ許可)
20 - ObjectCollision
26 - Custom26
27 - Custom27
28 - Custom28
29 - IgnoreRealtimeLight
30 - WallCollision
31 - IgnoreParticipant
Unity の既定のレイヤーは "Default" という名前なので、他のオブジェクトと対話しない場合は別のレイヤーを使用する必要がある場合があります。 たとえば、アバターと対話しないオブジェクトには IgnoreParticipant が使用され、何も操作しないオブジェクトには IgnoreCollisions が使用されます。
いくつかの重要なレイヤー
[Default]
指定しない場合、コライダーは 既定 のレイヤー上に存在します。 これはウォーク可能なレイヤーであり、アバターは正しく接地されます。 ローカル ユーザーの有効なテレポート ターゲットではありません。 このレイヤーは、他のオブジェクトと対話して競合します。
GroundCollision
GroundCollision レイヤー上のコライダーのみが、ローカル ユーザーの有効なテレポート ターゲットです。 それ以外の場合は 、既定 のレイヤーと同じです。
衝突でサポートされていないビジュアル ジオメトリはウォーク可能ではなく、アバターをブロックしないため、不適切なテレポート ターゲットであり 、GroundCollision レイヤーに配置しないでください。
WallCollision
WallCollision レイヤーは、アバターをプレイ可能な空間内で制限するためにアバターが貫通してはならない壁を示すために使用されます。 VRユーザーは、ルームスケールの移動中にHMDの動きで任意の方法でアバターを移動することができ、物理的に仮想壁を歩くことができます。 アバターは、設定された距離を歩いた後、プレイエリアの境界にテレポートされます。 それ以外の場合、このレイヤーは 既定 のレイヤーと同じです。
レイヤー定義
ID と名前で定義されたレイヤーの一覧を次に示します。これには、ブロッキング セマンティクスと説明が含まれます。
Default
[アバター/オブジェクト/レイキャスト ブロック]
衝突と照明に使用されます。 アバターは歩くことができますが、その上にテレポートすることはできません。 ほとんどの小道具の既定値。 既定のレイヤー上のオブジェクトは、環境からリアルタイムの方向ライトを受け取ります。
TransparentFX
[ブロックしない]
透過的および特殊効果オブジェクトに対する Unity のレンダリング パイプラインでの特別な処理。は、透過性の正しいレンダリング順序を保証します。
IgnoreRaycast
[アバター/オブジェクトのブロック]
相互作用できないオブジェクトやアバターが通過できない非表示の壁など、レイキャストをブロックしない衝突対応レイヤー (オブジェクトをスローできる手すりなど、アバターはホップオーバーできないなど) を通過できます。
該当なし
水
[ブロックしない]
具体的には水表面のために。 水と特殊なレンダリングや物理相互作用に使用できます。 非トリガー コライダーでは を使用しないでください。
該当なし
該当なし
該当なし
該当なし
該当なし
該当なし
該当なし
該当なし
該当なし
GroundCollision
[アバター/オブジェクト/レイキャスト ブロック]
テレポート可能なウォーク可能な衝突サーフェスに使用されます。 注: Mesh Toolkit の以前のバージョンでは、これは "NavMesh" レイヤーでした。
該当なし
該当なし
IgnoreCollisions
[ブロックしない]
何も操作しません。 環境やその他のオブジェクトをクリップできます。
TriggerVolume
[ブロックしない]
物理やレイキャストの影響を受けず、それ以外の場合は特別な使用法がないオブジェクトのレイヤー。 非トリガー コライダーを持つオブジェクトでは を使用しないでください。
該当なし
ObjectCollision
[オブジェクトのブロック]
オブジェクトと衝突するレイヤーですが、アバターやレイキャストには衝突しません。
IgnoreObjects
[アバター/レイキャスト ブロック]
アバターと衝突するレイヤーですが、オブジェクトには衝突しません。
RaycastOnly
[レイキャスト ブロック]
レイキャストをブロックする、または選択できるがアバターやオブジェクトの衝突には影響しないオブジェクトのレイヤー。
該当なし
該当なし
該当なし
Custom26
[アバター/オブジェクト/レイキャスト ブロック]
ユーザー定義レイヤー。
Custom27
[アバター/オブジェクト/レイキャスト ブロック]
ユーザー定義レイヤー。
Custom28
[アバター/オブジェクト/レイキャスト ブロック]
ユーザー定義レイヤー。
IgnoreRealtimeLight
[アバター/オブジェクト/レイキャスト ブロック]
ほとんどの静的オブジェクトなど、環境内のどのアート オブジェクトがリアルタイムの方向ライトを受け取らないかを指定します (ライトマップでは、代わりにベイクされた照明を使用します)。
WallCollision
[アバター/オブジェクト/レイキャスト ブロック]
シーン内のクリッピングを防ぐ衝突。 HMD ユーザーが壁に頭を突き刺すと、再生可能な領域の近くの場所に再び表示されます。
IgnoreParticipant
[オブジェクト/レイキャスト ブロック]
レイキャストやその他のオブジェクトをブロックするオブジェクト。アバターはブロックしません。
レイヤーの相互作用とテーブル
レイヤーの相互作用
レイヤー テーブル