我有大量的网格物体用于放置在四边形上的2D项目(作为四边形的材质)。他们就像“地图”;从内部填充,但边缘透明。
我为每个地图制作一个多边形对撞机并将其放在它上面,以便我可以使用Physics2D.Raycast()
来检测用户是在地图上还是在地图上放置了一个对象。它们就像形状(多边形)。
制作多边形对撞机的过程非常耗时且质量不太好。是否有一些网格对撞机可以检测透明度,从而将自身塑造成地图的形状?或者有没有办法制作一个脚本,将对撞机塑造成地图的形状?
答案 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;
}