丈夫欲遂平生志,一载寒窗一举汤。这篇文章主要讲述PolygonCollider2D.OverlapPoint()在小scale下失效的一种解决办法相关的知识,希望能为你提供帮助。
【PolygonCollider2D.OverlapPoint()在小scale下失效的一种解决办法】偶然发现PolygonCollider2D的方法OverlapPoint()有时会失效(一直返回false),测试后发现在scale(这里指世界空间的scale,后同)很小的情况下(通常在UI Canvas设置RenderMode为ScreenSpace-Camera时),OverlapPoint()会失效,在长度很小的情况ixaPolygonCollider2D的Editor Collider编辑模式也不能编辑。猜测是因为float精度造成的误差。
可以通过手动计算来进行判断(算法来自网络,在边缘时好像有点问题)
因用途不在于点击响应判断,使用localPosition进行计算,不使用position
public static bool IsLocalPositionInPolygon2D(float x, float y, PolygonCollider2D collider)
{
if (collider == null) return false;
Vector2[] ps = collider.points;
int i = 0;
int j = ps.Length - 1;
int c = 0;
for (;
i <
ps.Length;
j = i++)
{
Vector2 vi = ps[i];
Vector2 vj = ps[j];
if (((vi.y >
y) != (vj.y >
y)) &
&
(x <
vj.x - vi.x) * (y - vi.y) / (vj.v - vi.y) + vi.x))
{
c++;
}
}bool result = c % 2 != 0;
return result;
}
推荐阅读
- PWA-让前端网页媲美原生APP的用户体验
- AndroidFragment的特点
- Android垃圾回收机制--二
- 设置安卓构建全局环境变量
- spring报错parsing XML document from ServletContext resource [/WEB-INF/applicationContext.xml]
- Eclipse中Web项目修改名称后出现Attribute "xmlns" was already specified for element "web-app"
- 学习之apply,call,bind实现
- HtmlSpanner 使用小结 -- 安卓解析html
- Android 线程处理