先放解决方案:
下面是一段扩展方法,将脚本放入项目中调用PolygonCollider2D.FlipX()即可使用。
public static class PolygonCollider2DFliper
{
public static PolygonCollider2D FlipX(this PolygonCollider2D collider)//反转X轴
{
for (int pathIndex = 0; pathIndex < collider.pathCount; pathIndex++)//获取所有Paths
{
Vector2[] pathPoints = collider.GetPath(pathIndex);
for (int i = 0; i < pathPoints.Length; i++)//反转X轴
pathPoints[i].x = -pathPoints[i].x;
collider.SetPath(pathIndex, pathPoints);
}
return collider;
}
public static PolygonCollider2D FlipY(this PolygonCollider2D collider)//反转Y轴
{
for (int pathIndex = 0; pathIndex < collider.pathCount; pathIndex++)//获取所有Paths
{
Vector2[] pathPoints = collider.GetPath(pathIndex);
for (int i = 0; i < pathPoints.Length; i++)//反转Y轴
pathPoints[i].y = -pathPoints[i].y;
collider.SetPath(pathIndex, pathPoints);
}
return collider;
}
}
使用方法如下:
//先获取到你的Collider组件
PolygonCollider2D collider = GetComponent<PolygonCollider2D>();
collider.FlipX(); // 直接根据X轴反转所有节点
场景描述
在2D项目开发中我通过更改SpriteRender属性中的FlipX来实现了角色的水平翻转,但是此时如果为角色增加PolygonCollider2D碰撞,碰撞的形状任然显示为角色翻转前的样式,入下图所示:

如果更改角色大小为负数可能出现别的问题,所以在特定的情况下如果能翻转
PolygonCollider2D的碰撞形状就会好处理很多。
调用后解决
如图所示,当我在Start函数中调用了翻转方法,碰撞就正确了:

