やりたいこと
- 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等)を取得することができる