没有合适的资源?快使用搜索试试~ 我知道了~
首页Unity实现图形相交检测
Unity实现图形相交检测
979 浏览量
更新于2023-05-27
评论 1
收藏 88KB PDF 举报
主要为大家详细介绍了Unity实现图形相交检测,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
资源详情
资源评论
资源推荐

Unity实现图形相交检测实现图形相交检测
主要为大家详细介绍了Unity实现图形相交检测,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣
的小伙伴们可以参考一下
前言前言
图形相交检测常常用在伤害判定,使用自定义的图形相交检测,可以在一定程度上控制性能。
比如2D格斗游戏中使用的矩形包围盒(AABB),一些动作游戏中常常出现的扇形攻击。
2D的图形相交检测能够满足大部分的需求,且可以拓展成为柱状的3D物体,2D比3D的计算复杂度会低很多,3D的图形检测
原理与2D相似,本文会实现几个圆形与其他2D图形的相交检测:
1、圆形与圆形
2、圆形与胶囊体
3、圆形与扇形
4、圆形与凸多边形
5、圆形与AABB
6、圆形与OBB
通过简单化处理,把被判定物都处理成由圆柱或多个圆柱构成的区域,所以只需要考虑圆形与其他形状的相交。
圆形与圆形圆形与圆形
两个圆形的相交检测非常简单直观,只需要判断半径只和与距离的大小。
定义圆形区间:
/// <summary>
/// 圆形区间
/// </summary>
public struct CircleArea
{
public Vector2 o;
public float r;
}
o ——圆心坐标
r ——圆半径
相交判断:
/// <summary>
/// 判断圆形与圆形相交
/// </summary>
/// <param name="circleArea"></param>
/// <param name="target"></param>
/// <returns></returns>
public static bool Circle(CircleArea circleArea, CircleArea target)
{
return (circleArea.o - target.o).sqrMagnitude < (circleArea.r + target.r) * (circleArea.r + target.r);
}
分离轴定理分离轴定理
分离轴定理(separating axis theorem, SAT)分离轴定理是指,两个不相交的凸集必然存在一个分离轴,使两个凸集在该轴
上的投影是分离的。
判断两个形状是否相交,实际上是判断分离轴是否能把两个形状分离。若存在分离轴能使两个图形分离,则这两个图形是分离
的。
基于以上理论,寻找分离轴是我们要做的工作,重新考虑两个圆形的相交检测,实际上我们做的是把圆心连线的方向作为分离
轴:

















安全验证
文档复制为VIP权益,开通VIP直接复制

评论0