コリジョン設定の重要性
Unreal Engine (UE) でゲーム開発を進めていると、以下のような問題に直面することがあります。
- 「複雑な形状のオブジェクトにキャラクターが埋まってしまう」
- 「オブジェクトが多くなった途端にゲームの動作が急に重くなる」
これらの問題の多くは、オブジェクトのコリジョン(衝突判定) の設定が原因で発生しています。特に、UEにおける「Simple Collision(単純なコリジョン)」と「Complex Collision(複雑なコリジョン)」の使い分けを理解していないと、意図しない挙動や深刻なパフォーマンス低下を招くことになります。
この記事では、UE初心者から中級者の方を対象に、この2種類のコリジョンの違い、設定方法、そしてゲームを快適に動作させるためのベストプラクティス を、具体的な例を交えて徹底的に解説します。
Simple Collision(単純なコリジョン)
Simple Collisionは、その名の通り単純な形状 で構成されるコリジョンです。
特徴
- 形状: ボックス(箱)、スフィア(球)、カプセル、または複数の凸包(Convex Hull) といった、数学的に処理しやすいプリミティブ形状の組み合わせで表現されます [1]。
- パフォーマンス: 非常に計算コストが低く、高速 です。
- 用途: キャラクターの移動や物理演算など、頻繁に衝突判定が行われる 場面で主に使用されます。
Simple Collisionは、実際のメッシュの形状を完全に再現するわけではありませんが、その単純さゆえに、大量のオブジェクトが存在してもCPUへの負荷を最小限に抑えることができます。例えば、複雑な岩のメッシュであっても、Simple Collisionではそれを囲む数個の箱や凸包で表現されます。
Simple Collisionの確認方法
Static Meshエディタを開き、メニューバーの「表示」から「Simple Collision」を有効にすると、緑色のワイヤーフレームで表示されます。
Complex Collision(複雑なコリジョン)
Complex Collisionは、オブジェクトの実際の三角メッシュ そのものをコリジョンデータとして使用します。
特徴
- 形状: オブジェクトのレンダリングに使用されるポリゴン(三角形) の形状と完全に一致します。
- パフォーマンス: 非常に計算コストが高く、低速 です。
- 用途: 非常に正確な当たり判定が必要な場面や、キャラクターの移動には使われないトレース(視線判定やレイキャスト) に使用されます。
Complex Collisionは、複雑な彫刻や入り組んだ形状でも正確な衝突判定を提供しますが、その分、計算量が多くなり、特に多数のオブジェクトや移動するオブジェクトに使用すると、 フレームレートの低下に直結します。
Complex Collisionの確認方法
Static Meshエディタで「Complex Collision」を有効にすると、青色のワイヤーフレームで表示されます。通常、これはメッシュのレンダリング形状と一致します。
Collision Complexityの設定
Static Meshアセットには、「Collision Complexity」という重要な設定項目があり、ここでSimple CollisionとComplex Collisionのどちらを、どのような用途に使用するかを決定します。
| 設定値 | 当たり判定 | トレース | 特徴と推奨用途 |
|---|---|---|---|
| Project Default | プロジェクト設定に従う | プロジェクト設定に従う | ほとんどの場合、デフォルト動作と同じです。 |
| Default | Simple | Complex | デフォルト設定。移動や物理演算には高速なSimpleを使用し、視線判定などには正確なComplexを使用します。最も推奨される設定 です。 |
| Use Simple Collision As Complex | Simple | Simple | 当たり判定に加え、トレースにもSimple Collisionを使用 します。Complex Collisionを使わないため軽量ですが、トレースの精度が落ちます。 |
| Use Complex Collision As Simple | Complex | Complex | 当たり判定に実際のメッシュを使用します。非常に重い ため、複雑な地形や、正確な判定が必須の場合に限定的 に使用します。 |
💡 Complex Collisionの制限
Use Complex Collision As Simpleを選択した場合、Complex Collisionとして使用されるのはLOD 0のメッシュ のみです。LOD 1以降のメッシュはComplex Collisionには使用されません。高ポリゴンなLOD 0を持つメッシュでこの設定を使用すると、パフォーマンスに大きな影響があります。
ベストプラクティス:Simple Collisionを優先する
Unreal Engineの設計思想として、キャラクターの移動や物理演算にはSimple Collisionを使用すること が強く推奨されています。
- 移動するオブジェクト(キャラクター、乗り物、動くプロップ): 必ずSimple Collisionを使用してください。Complex Collisionを移動するオブジェクトに使用すると、パフォーマンスが致命的に低下します。
- 静的な背景オブジェクト(壁、床、単純な岩): Simple Collisionで十分です。Static Meshエディタで自動生成されるSimple Collision(凸包)で、ほとんどのケースに対応できます。
よくある間違い:「Use Complex Collision As Simple」の乱用
「Simple Collisionだと形状が合わず、キャラクターが埋まってしまう」という問題を解決するために、安易にUse Complex Collision As Simpleに設定してしまうのは危険 です。
この設定は、数百万ポリゴンのメッシュ全体 を衝突判定に使 用することを意味し、特にオブジェクト数が多い場合や、多数のキャラクターがその上を移動する場合、ゲームがフリーズするほどの負荷がかかる可能性があります。
【代替案】 Simple Collisionの精度が不足する場合は、以下の手順で手動でSimple Collisionを調整 してください。
- Static Meshエディタで、プリミティブ(Box, Sphere, Capsule)を追加し、メッシュの形状に合わせて配置する。
- 「凸包の自動生成(Auto Convex Collision)」機能を使用し、許容できる精度とポリゴン数でSimple Collisionを再生成する。
実践的な使い分けの例
| シナリオ | 推奨されるコリジョン設定 | 理由 |
|---|---|---|
| プレイヤーキャラクター | Capsule Component (Simple) | 最も高速で、段差の乗り越えなどに適しているため。 |
| 壁や床 | Simple Collision (Box/Convex Hull) | 静的で、高速な判定で十分なため。 |
| 複雑な形状の岩や彫像 | Simple Collision (調整された凸包) | 形状をある程度再現しつつ、パフォーマンスを維持するため。 |
| 狙撃の視線判定 | Complex Collision (デフォルト設定) | プレイヤーの移動には使わず、正確なレイキャストが必要なため。 |
| 複雑な地形メッシュ | Use Complex Collision As Simple | プレイヤーが乗る場所の精度が必須の場合。ただし、LODやCullingを厳密に設定 し、負荷を最小限に抑える必要があります。 |
コリジョン設定のポイント
Unreal Engineのコリジョンは、「パフォーマンスのSimple」 と 「精度のComplex」 という二つの側面を持っています。
- Simple Collision: 移動や物理演算など、頻繁な衝突 に使用し、パフォーマンスを確保する。
- Complex Collision: トレース(視線判定)など、正確性が求められる 場面に限定して使用する。
ほとんどの場合、Static MeshのCollision Complexityは Use Simple Collision As Complex のままにしておき、Simple Collisionの形状を工夫して精度を確保することが、UE開発における最良のバランス となります。コリジョン設定を最適化し、快適なゲーム体験を実現しましょう。