「喰う・書く・逃げる」に棲む処

 動物に関するデータ分析者のブログです

UnityのCollider系統は`foreach`を使わないと取得できないっぽい

UnityのPolygonCollider2Dを無効にするプログラムを作りたかったのですが、

PolygonCollider2D collider = GameObj.GetComponent<PolygonCollider2D>();

とするとcolliderの中身がnullになってしまい、PolygonCollider2Dを取得できませんでした。

ネットを探すと解決策を発見!!

answers.unity.com

要は、foreachで回せばよいということでした。

なので、解決策は以下のようになります(Collider2DでもOK)。

foreach (PolygonCollider2D collider in GameObj.GetComponents<PolygonCollider2D>())
{
    collider.enabled = false;
}

ちなみに、このゲームオブジェクトはPolygonCollider2Dを一つしか持っていないので一回転しかしてません。

ここで、foreachならうまくいくので配列なら取得できるのかと思ったので以下も試してみました。

Collider2D[] ColList = GameObj.GetComponents<Collider2D>();
PolygonCollider2D[] PolyColList = GameObj.GetComponents<PolygonCollider2D>();

Collider2DでもPolygonCollider2D(Collider2Dの継承)でも中身がnullになってしまいました。

どんな仕様してるんでしょうかね?