网格对撞机检测透明度

时间:2016-08-08 12:22:48

标签: unity3d

我有大量的网格物体用于放置在四边形上的2D项目(作为四边形的材质)。他们就像“地图”;从内部填充,但边缘透明。

我为每个地图制作一个多边形对撞机并将其放在它上面,以便我可以使用Physics2D.Raycast()来检测用户是在地图上还是在地图上放置了一个对象。它们就像形状(多边形)。

制作多边形对撞机的过程非常耗时且质量不太好。是否有一些网格对撞机可以检测透明度,从而将自身塑造成地图的形状?或者有没有办法制作一个脚本,将对撞机塑造成地图的形状?

2 个答案:

答案 0 :(得分:0)

事实证明Polygon Collider 2D具有为这种透明网格生成多边形的功能。只需在多边形对撞机组件上拖放一个精灵即可。

答案 1 :(得分:0)

以下是解决方案:使用RaycastAll检索所有被击中的对象,然后返回最近的对象,使像素的alpha值不为0.

private static RaycastHit? RaycastWithTransparency(Ray ray)
{

    var res = Physics.RaycastAll(ray, float.MaxValue).ToList().OrderBy(h => h.distance);


    foreach (var h in res)
    {
        var col = h.collider;


        Renderer rend = h.transform.GetComponent<Renderer>();
        Texture2D tex = rend.material.mainTexture as Texture2D;
        var xInTex = (int) (h.textureCoord.x*tex.width);
        var yInTex = (int) (h.textureCoord.y*tex.height);
        var pix = tex.GetPixel(xInTex, yInTex);

        if (pix.a > 0)
        {
            //Debug.Log("You hit: " + col.name + " position " + h.textureCoord.x + " , " + h.textureCoord.y);
            return h;

        }
    }
    return null;
}