先上效果图
可能大家都已经对Polygon Collider 2D这个组件已经非常的熟悉,就是一个判断多边形碰撞的组件,我们可以通过编辑形状大小来实现对不同多边形的碰撞检测。
但是如果遇到较为复杂的多边形,我们在调节时就可能会相对困难,例如下边这个复杂的多边形
在这里分享一个脚本,可以去识别多边形最边缘的边,把最边缘的边赋值给Polygon Collider 2D,就可以使得Polygon Collider 2D的大小完美贴合多边形的边缘。
查找边缘的主要算法就是取到多边形内不共用的边(可以发现只有边缘的边是不被三角形共用的,被三角形公用的边都在内部)
代码:
using UnityEngine;
using System.Collections.Generic;
using UnityEditor;
[RequireComponent(typeof(MeshFilter))]
[RequireComponent(typeof(PolygonCollider2D))]
[ExecuteInEditMode]
public class Mesh2DColliderMaker : MonoBehaviour {
/// <summary>
/// 定义一个结构体,用来表示边
/// </summary>
struct Edge2D
{
public Vector2 a;
public Vector2 b;
public override bool Equals(object obj)
{
if (obj is Edge2D)
{
var edge = (Edge2D)obj;
//An edge is equal regardless of which order it's points are in
return (edge.a == a && edge.b == b) || (edge.b == a && edge.a == b);
}
return false;
}
public override int GetHashCode()
{
return a.GetHashCode() ^ b.GetHashCode();
}
public override string ToString()
{
return string.Format("[" + a.x + "," + a.y + "->" + b.x + "," + b.y + "]");
}
}
MeshFilter filter;
PolygonCollider2D polyCollider;
void Start()
{
filter = GetComponen