コンポーネント
- BoxCollider
- CapsuleCollider
- ConeCollider
- ConvexHullCollider
- CylinderCollider
- MeshCollider
- SphereCollider
- TriangleCollider
Resoniteのコライダーに関する豆知識
コライダーの種類について
ConvexHull(凸包)ColliderとMeshColliderはメッシュ(形状)のデータを利用します。
ほかは設定数値を元に計算で作り出されます。
MeshColliderとTriangleColliderは面のみで内側はありません。
ほかは内側も当たり判定があります。(方向もあります。)
ちなみに、SkinnedMeshColliderは存在しません。(SphereColliderやCapsuleColliderで代用しましょう。)
コライダーの変形について
CapsuleColliderやConeCollider等は、スロットのScaleを変形させても無駄です。
形状は変形せず、平均的に大きさが変化するのみです。
コライダーを可視化した際の見た目は変形して見えますが、手から出るレーザーで走査すると実際のコライダー形状が異なる事が分かります。
コライダーの計算負荷について
SphereColliderが一番計算負荷が少ないです。(次にCapsuleCollider等です。)
ConvexHull(凸包)ColliderやMeshColliderは使用する場面にもよりますが、計算負荷が高くなりがちです。
その為、コライダーを設定する際はなるべくスフィアやカプセルコライダー等を活用すると良いです。
常時移動や回転したり、頻繁にアクティブが切替るものは特に効果があります。
でも、コライダーの設定は手間が掛るので、動かない・アクティブを切替えない・メッシュの密度が薄い時は、メッシュコライダー等も活用して楽をしましょう。
コライダーは最初に最適化処理が行われます。(ホストがやってる?)
Enabledを切替えたりすると、再計算されます。
なるべく、大量のコライダーのEnabledを高頻度で切替えないようにしましょう。
常時移動(駆動)している物のコライダーは最適化処理がされないっぽいので、毎フレーム計算している可能性があります。
なるべく、常時動く物や駆動されている物はコライダーを付けない方が良いでしょう。
もし付ける場合は、スフィアやカプセルコライダー等を使用し、距離等に応じてEnabledを制御すると良いでしょう。
掴んでいるときは、コライダーのEnabledをFalseにすると効果的です。
レーザーが当たらない物を選択する方法
デブツールで選択したいけどコライダーが無くてレーザーを当てられない時は、ツールの先端をObjectの原点位置付近に移動させて、セカンダリーを押すと選択できます。
原点位置の推測ができれば、便利なテクニックです。
たまに、デブツールでセカンダリー押すと何かにヒットするのは、たまたま何かの原点がそこにあったからです。
理想はインスペクターを常に整理整頓して、分かりやすくしておく方が良いです。
コライダーが行方不明になる
コライダーが行方不明になって、あらぬところに取り残されていることがあります。
通常、ユーザーが掴んで移動した場合は行方不明にはならないのですが、Fluxやコンポーネント等のギミックで動かしたり、戻すボタンで動かしたりすると、行方不明になりがちです。
そもそもコライダーを動かさないのが理想ですが、もし動かす場合は単純な仕組み(掴んで動かすだけ)にしましょう。
複雑なギミックの場合は、動き終わったらコライダーを再計算する事で解決します。方法は色々ありますが、コライダーのEnabledをOff/Onしたり、親スロットを掴んで動かしたりすれば直ります。
軽量化テクニック
コライダーは目に見えないので甘く見られがちですが、意外と計算負荷が高いです。特に貧弱なCPUでプレイしてる人は大変です。
なので、アイテムやワールドを作る際はコライダーにも意識を向けることで、より良くできます。
まず、Activeタイプのコライダーは注意が必要です。
よくある例として、Fluxで接触判定を取るときにActiveコライダーをユーザー全員に判定処理させてからIFノードで必要なユーザーの判定のみを選別する方法がありますが、非効率で無駄な処理なので今すぐ改善しましょう。
最初からユーザーを限定し、そのユーザーのみローカルでActiveコライダーの接触判定を取りましょう。ワールドに居る全員に計算させる必要はないです。
つぎに、MeshColliderです。
数億ポリゴンのメッシュコライダーは危ないので使用を避けましょう。常に動いたり変形したりするコライダーも同様です。
なるべく、SphereColliderやCapsuleCollider等で代用しましょう。
位置や回転等が動く場合もヤバイです。
動く物にはコライダーを付けない方が良いです。
もし付ける場合は、計算負荷を軽減するための工夫が必要です。
アバターについているコライダー
初期設定は、体の各部位にCapsuleCollider、手はBoxCollider、頭はSphereCollider、計15個のコライダーが付いています。
さらに、SimplifiedColliderというデカいカプセルコライダーが1個付きます。
これらは、距離が数メートル離れると自動的にローカルで切替ります。この機能によって、遠くのアバターのコライダーが簡略化(デカいカプセルコライダー1個)されて、負荷が少なくなります。
しかし、多くのユーザーはこの機能の存在を知らないので、アバター改変後にコライダーの最適化を行っていないのが実情です。
さらに、追加の衣装や髪型等をインポートする際にコライダー作成(初期設定は有り)してしまい、全身に不必要なコライダーを大量にまとった、激重アバターも存在します。
コライダーは目に見えないので、自分自身のアバターが高負荷の原因になっている事に気付いていないユーザーがほとんどです。
対策は3つ
- アバターに不必要なコライダーを付けない。
追加衣装等をインポートする際は、「高度な設定」の「コライダーを作成」をOFFにしましょう。(ただし、インポートされた追加衣装等にはレーザーを当てることができないので、インスペクターで操作しましょう。)
もちろん、後でコライダーを消しても良いです。不必要なコライダーは徹底的に消しましょう。 - VRIKAvatarコンポーネントの_rigCollidersEnabledStates(list)を活用しましょう。
このリストに、後から追加したコライダー等のEnabledを設定する事で、距離が数メートル離れると自動的にローカルでOFFにしてくれます。 - どうしても必要な場合は、スフィアやカプセルコライダーを使用しましょう。
Resonite公式Wiki
https://wiki.resonite.com/Collider