おれ、Unity2Dでゲーム作るんだ。

Unity2Dをメインに、覚書などを記事にしていきます。

Collider2Dだけで重なりを判定する(Collider2D.OverlapCollider)

f:id:xev:20170624114428p:plain
画像が重なっているか確認したい事ってありますよね。

でもって、その時のために、

わざわざ重なってるかどうか知りたいだけなのにRigidbodyなんか使いたくない

時ってありますよね。


調べても、

2D collision detection without rigid body? - Unity Answers

コライダーはリジッドボデイにくっつけて、トリガーでとるっつっでんだろ。と答えられており、
諦めかけおりました。


ところが、とうとうUnity5.6で(つ、つい最近ですね)、

Collider2D.OverlapCollider
に出会いました。

Unity - Scripting API: Collider2D.OverlapCollider

ということで、

# 準備

  • 重なりを確認したいオブジェクトにスプライトとCollide2D系を突っ込んでおく
  • 適当にアタッチするスクリプトを作成してアタッチ
  • 格納バッファ(Collider2D)を準備
  • Collider2DからOverlapColliderメソッドを実行

上手くいけばこんな感じでチェックできます。

f:id:xev:20170624113600p:plain


参考にコード私はこんなコードで確認しました。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class OverlapCheck : MonoBehaviour
{

    Collider2D col2D;
    Collider2D[] result;

    void Awake()
    {
        col2D = GetComponent<Collider2D>();
        result = new Collider2D[10];
    }

    void OnEnable()
    {
        OverlapCount();
    }

    // Use this for initialization
    void Start()
    {

    }

    void OverlapCount()
    {
        int count = col2D.OverlapCollider(new ContactFilter2D(), result);
        Debug.Log("Overlap=" + count);
        foreach (var r in result)
        {
            if (r != null) Debug.Log(r.name);
        }
    }

}

以上、なるべく最新版で開発できるということはいいこと、
とくに、2Dは充実してきているので、なるべくUnityはアップデートしていきたいといことでした。