【Unity】PolygonCollider2D镜像翻转 Flip 跟随角色翻转 2D多边形碰撞器水平垂直翻转

先放解决方案:

下面是一段扩展方法,将脚本放入项目中调用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碰撞,碰撞的形状任然显示为角色翻转前的样式,入下图所示:

通过SpriteRender.FlipX翻转后 添加PolygonCollider2D碰撞不正确
碰撞不太对的萨菲罗斯

如果更改角色大小为负数可能出现别的问题,所以在特定的情况下如果能翻转

PolygonCollider2D的碰撞形状就会好处理很多。


调用后解决

如图所示,当我在Start函数中调用了翻转方法,碰撞就正确了:

调用PolygonCollider2D.FlipX()
调用PolygonCollider2D.FlipX()

 

调用后碰撞正常
调用后碰撞正常

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值