OkakenProject

ちょっとした スキマ時間のお手伝い

【Unity】Colliderを複数つけたオブジェクトのColliderを無効化する

やりたいこと

  • 1つのオブジェクトに複数のColliderをつけた状態
  • 他のオブジェクトに衝突した際など、何らかのトリガ発生時にそれらのColliderを一斉に無効化する

結論

  • GetComponents<Component>()を使用して複数Colliderを取得して処理

  • public class XXController : MonoBehaviour
  • {
  •   Component[] components;
  •   void Start()
  •   {
  •     components = GetComponents<Component>();
  •   }
  •  
  •   private void OnCollisionEnter2D(Collision2D collision)
  •   {
  •      if (collision.gameObject.CompareTag("Target"))
  •      {
  •         foreach(var component in components)
  •         {
  •            if(component.GetType().Name == "BoxCollider2D")
  •            {
  •               Collider2D collider = (Collider2D)component;
  •               collider.enabled = false;
  •             }
  •         }
  •      }
  •   }
  • }

説明

  • GetComponent<Collider2D>()だとInspectorで一番上のものだけ取得してしまう
  • 複数の同名コンポーネントを指定する場合はGetComponents<Component>()を使用する
  • 戻り値はColliderにキャストしてあげると良い
  • なお、GetComponents<Monobehavior>()を使用すると、Collider等のビルトインコンポーネントは取得されず、自作スクリプト(ここではXXController等)を取得することができる