26.Unity中判断两个2D矩形是否相交

26.Unity中判断两个2D矩形是否相交


26.1 题目

Unity中判断两个2D矩形是否相交,有几种方式?(请至少说出两种方式)


26.2 深入解析

在Unity中,判断两个2D矩形是否相交有多种方式。以下是其中的三种方法:

  1. 使用Unity物理系统进行碰撞检测

  2. 使用Unity中范围检测相关API

  3. 自己写算法进行检测

方法1:使用Unity物理系统进行碰撞检测

可以使用Unity的2D物理系统中的 Collider2D 组件和 Rigidbody2D 组件来进行碰撞检测。

using UnityEngine;

public class CollisionCheck : MonoBehaviour
{
    // 碰撞检测
    void OnCollisionEnter2D(Collision2D collision)
    {
        if (collision.gameObject.CompareTag("OtherRectangle"))
        {
            Debug.Log("两个矩形相交了!");
        }
    }
}

方法2:使用Unity中范围检测相关API

Unity提供了一些用于检测范围重叠的API,比如 Rect.Overlaps 方法。

using UnityEngine;

public class RangeCheck : MonoBehaviour
{
    public Rect rect1;
    public Rect rect2;

    void Start()
    {
        if (rect1.Overlaps(rect2))
        {
            Debug.Log("两个矩形相交了!");
        }
    }
}

方法3:自己写算法进行检测

可以自己编写算法来判断两个2D矩形是否相交。这种方法适用于需要自定义碰撞检测逻辑的情况。

using UnityEngine;

public class CustomCollisionCheck : MonoBehaviour
{
    public Rect rect1;
    public Rect rect2;

    void Start()
    {
        if (AreRectanglesIntersecting(rect1, rect2))
        {
            Debug.Log("两个矩形相交了!");
        }
    }

    // 自定义矩形相交检测算法
    bool AreRectanglesIntersecting(Rect r1, Rect r2)
    {
        return r1.xMin < r2.xMax && r1.xMax > r2.xMin &&
               r1.yMin < r2.yMax && r1.yMax > r2.yMin;
    }
}

相交条件分解(AABB,轴对齐):

  1. X 轴投影重叠r1.xMin < r2.xMax && r1.xMax > r2.xMin(两区间在 X 上相交)。

  2. Y 轴投影重叠r1.yMin < r2.yMax && r1.yMax > r2.yMin(两区间在 Y 上相交)。注意 Rect 的 yMin/yMax 与坐标系(屏幕/GUI 与场景 2D)一致即可,含义均为「两矩形在 Y 方向范围重叠」。

  3. 整体:X、Y 同时重叠则两矩形相交。

总结

  • 使用Unity物理系统进行碰撞检测:通过 Collider2D 组件和 Rigidbody2D 组件进行检测。
  • 使用Unity中范围检测相关API:使用 Rect.Overlaps 方法进行检测。
  • 自己写算法进行检测:通过自定义算法来判断两个2D矩形是否相交。

26.3 答题示例

“判断两个 2D 矩形相交,常见做法有:

  1. Rect.Overlaps:直接使用 UnityEngine.Rect 结构的 rect1.Overlaps(rect2) 接口;
  2. 自定义 AABB 检测:通过比较 xMin/xMaxyMin/yMax 范围来判断相交;
  3. (可选)使用 2D 物理引擎,把矩形挂载 BoxCollider2D 并通过 OnCollisionEnter2DIsTouching 判断。”

26.4 关键词联想

  • Rect.Overlaps — Unity 内置 API
  • AABB 碰撞检测 — 自定义算法
  • xMin/xMax/yMin/yMax — 范围比较
  • Collider2D / Rigidbody2D — 物理检测
  • OnCollisionEnter2D / IsTouching — 回调与查询
  • Axis‐Aligned Bounding Box


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏