我正在尝试创建一个代表自上而下游戏中玩家视野的多边形。为此,我按照此处的教程进行操作,并亲自编写了代码以使其在Unity中正常工作。
https://ncase.me/sight-and-light/
首先,我从Obstacles
的网格中获取所有顶点。然后,我将它们转换为世界位置,并向每个点投射光线。我还向左投射了一条额外的光线,向右投射了一条额外的光线,以击中可能位于障碍物后面的任何墙壁。
然后我按照旋转角度和与玩家的距离对找到的交点进行排序。
intersections.Sort((i1, i2) =>
{
var position = transform.position;
Vector3 targetDir1 = i1 - position;
Vector3 targetDir2 = i2 - position;
float angle1 = Vector3.SignedAngle(targetDir1, targetDir2, Vector3.up);
if (angle1 > 0)
{
return -1;
}
if (angle1 < 0)
{
return 1;
}
return targetDir2.sqrMagnitude.CompareTo(targetDir1.sqrMagnitude);
});
这是绘制的视线多边形线的图像。白线是射线投射,绿线是创建的相交顶点。
如果我使用Poly2Mesh绘制多边形,有时我会正确绘制它,而有时它会变形。
正确
变形
对此感到奇怪的是,顶点显示正确,因为您可以看到以绿色绘制的基础多边形看起来很好。我唯一能想到的是,它是由于相交的排序错误而导致尝试创建凹形。
可能是什么原因造成的?