8-2. コリジョン検出に関する重要なパラメータ

コリジョン検出に関する重要なパラメータ

Roblox開発において、オブジェクト間のコリジョン検出を制御するためのいくつかの重要なパラメータがあります。これらは、ゲーム内での物体の挙動や相互作用に大きな影響を与えます。
また衝突に関するパラメータは適切に設定することでエクスペリエンスパフォーマンスの向上につながります。内容を把握し無駄な物理演算負荷をなくした設定ができるようになりましょう。

CanCollide

  • 動作: 有効だと他のオブジェクトと衝突する(すり抜けない)
  • 最適化: 無効のほうが物理計算を省略でき負荷が軽くなる
は、オブジェクトが他のオブジェクトと物理的に衝突するかどうかを決定します。オブジェクト双方のCanCollideが有効の場合にのみ衝突し、片方でも無効の場合すり抜ける挙動となります。
最適化の観点では、基本的に無効のほうが物理演算の負荷が軽減されパフォーマンスが向上します。ただし、体験上見た目のあるオブジェクトは通常衝突することが自然であり大部分は有効にせざるをえないのが通常です。ユーザーが確実に侵入しないエリアなど、確実に無効化が可能な部分で無効にすることを考えましょう。

CanTouch

  • 動作: 有効の場合はTouched、TouchEndedイベントが発行されます
  • 最適化: 無効だとTouch検出・イベント発行処理が減り、負荷・メモリ消費等が抑えられます
は、オブジェクトがイベント、イベントを発行するかどうかを制御します。無効の場合触れてもイベントは発行されません。
最適化の観点では、無効のほうが物理計算側でのタッチ検出やそれに伴うイベント発行処理が省略されパフォーマンスが向上します。デフォルトが有効であるため有効のままになることが多いですが、可能であれば必要なものに限定できるのが理想です。

CanQuery

  • 動作: 有効の場合RayCastingなどの空間クエリ対象に含まれ検出されます
  • 最適化: 無効であれば、空間クエリ時の対象が絞られクエリ負荷が抑えられます
は、オブジェクトがレイキャストや領域検索のクエリに含まれるかどうかを制御します。無効の場合クエリ対象に含まれなくなります。
最適化の観点では、向こうのほうがクエリ対象から省かれ、クエリ時のパフォーマンス向上に寄与します。デフォルトで有効のパラメータのため有効のままになることが多いですが、可能であれば必要なものに限定できるのが理想です。

CollisionFidelity

  • 動作: コリジョンを構成する精度を形状タイプで指定します
  • 最適化: より簡素な形状を利用するほど物理計算負荷が軽くなります
は、オブジェクトのコリジョンモデルの精度を制御します。などの簡素な形状や、逆に精密ななどの指定ができます。精度が高いほど見た目に沿ったコリジョ判定がされるようになります。
最適化の観点では、より簡素な形状を利用するほど物理計算の負荷が軽くなりパフォーマンス向上に寄与します。ただし、簡易な形状では見た目との齟齬が起きやすくなるため、通常は設定のまま利用します。体験上問題のある場所のみに、指定による精密化や、体験上簡略化したほうが良い場所ではあえてシンプルな形状を指定します(階段等で細かな段差がない方が登りやすいなど)。

コリジョンパラメータ設定の留意点

ここまで見たように、コリジョンパラメータは基本的に無効や簡素なものにするほど、物理計算負荷やメモリ消費が抑えられ、パフォーマンス向上に寄与します。可能であれば無駄な設定を省けるのが望ましいと言えます。
しかしながら、実際には常にすべてに対してどう設定すべきかを考慮することは難しいことが多いでしょう。実際にはパフォーマンスで問題が出た際にこれらを最適化項目の1つとして対策するといった形になることが多いです。

参照すべき情報