複数のコライダーを結合して、当たり判定を1回だけにする

壁を複数のゲームオブジェクトで作成して、それらを1つのコライダーで当たり判定としたいときなどに使える機能です
今回は、プレイヤーキャラクターに2つのコライダーがアタッチされているケースでアイテムや敵との当たり判定が1回しか発生させないようにするサンプルを通して学習していきましょう

1回の衝突で複数回の衝突イベント(Trigger)が発生するケース

複数のコライダーを1つのゲームオブジェクトにアタッチ

ただし、このオブジェクトの当たり判定は・・・

評価のための実行

実行後、シーンビューのPlayerをマウスでドラッグして衝突させます

シーン構成(2回当たり判定になるパターン)

2つのゲームオブジェクトを作成
キャプチャのように衝突時にトリガーが発生するようにコンポーネントを構成

Player(カプセル)

プレイヤーは、地面や壁にめり込んではいけないため、IsTriggerは無効(Off)
Rigidbody2Dは、実行時にオブジェクトをマウスで移動させたいので、Kinematicとします

Capsule(カプセル)

IsTriggerはこちらで設定(On)
すり抜けるイメージです

当たり判定用のスクリプト

using UnityEngine;

public class TriggerCheck : MonoBehaviour
{
    /// <summary>
    /// このトリガーに接続されたトリガーコライダー内に他のオブジェクトが入ったときにコールされます
    /// オブジェクト(2D物理のみ)
    /// </summary>
    /// <param name="other">この衝突に関与するもう1つのCollider2D</param>
    void OnTriggerEnter2D(Collider2D other)
    {
        Debug.Log("TriggerEnter2D");
    }
}

1回の衝突で1回の衝突イベント(Trigger)を発生させる

複数のコライダーを1つにまとめる

Box ColliderとCircle Colliderを1つのコライダーにするようにすれば良さそうですね

評価のための実行

シーン構成の変更箇所(当たり判定が1回になるパターン)

先に作成した構成を更新します

Player(カプセル)

Composite Collider 2Dコンポーネントを追加します(このコンポーネントでコライダーの結合が可能になります)
すでにアタッチされている2つのコライダー(Circle Collider 2DとBox Collider 2D)のComposite OperatinをMergeにします。また、コライダーの位置も調整します

Capsule(カプセル)

変更はありません

当たり判定用のスクリプト

変更はありません

Composite Collider 2D

UnityのComposite Collider 2Dは、2Dゲーム開発において物理演算を行う際に便利なコンポーネントです。主に以下のような場面で使用されます:

  1. 複数のColliderを単一のColliderに結合する場合: 通常、複数のオブジェクトにそれぞれColliderがアタッチされている場合、それらのColliderが重なっている場合、それらを1つの大きなColliderとして扱うことが有用です。Composite Collider 2Dはこれを実現します。
  2. パフォーマンス向上: 複数のColliderを結合することで、物理エンジンがより効率的に処理できるため、パフォーマンスが向上することがあります。特に多くのオブジェクトが交互に衝突する場面で効果的です。
  3. 地形の生成: 地形の生成やレベルデザインにおいて、複数の地形要素を結合して地形Colliderを生成するのに便利です。これにより、複雑な地形を効率的に表現できます。
  4. トリガーエリアの定義: 複数のColliderを組み合わせてトリガーエリアを作成することができます。プレイヤーキャラクターがエリアに侵入したり、エリア内のアクションをトリガーするのに使用できます。
  5. オブジェクトの外形を定義する: 複数のColliderを結合することで、オブジェクトの外形を正確に表現できます。これは、衝突判定や物理演算において正確さが必要な場面で有用です。

総じて、Composite Collider 2Dは、複数のColliderを効率的に結合して、物理演算を最適化し、パフォーマンスを向上させるために使用されます。ゲーム内の異なる要素の衝突や相互作用を制御する際に、コンポジットコライダーは非常に役立つツールです。

参考

Unity

Posted by hidepon