Unity在UGUI上使用Polygon Collider 2D实现不规则图案匹配

在一个项目中需要对衣服部位进行颜色填充,由于衣服每个部位都是不规则的图形,所以我采用Polygon Collider2D组件作为碰撞器进行射线检测。
如果使用2D sprite对象赋予好图片之后再添加Polygon Collider2D的话会直接自动获取sprite的顶点并生成相应的collider,大小也正好匹配2DSprite。由于我当时使用的功能都是基于UGUI,所以当我把Polygon Collider2D赋予给Image的时候,发现它并没有像2DSprite一样自动获取顶点并生成相应collider样式。好在unity给了我们解决方法——可以通过拖拽Image里面对应的sprite放入Polygon Collider2D中,这样Polygon Collider2D的Point会自动生成相应的顶点,但是发现拖拽进去之后却没有跟2DSprite一样绿色的网格包裹住图片。

在这里插入图片描述

通过仔细观察,发现放大之后的Image图像里确实是存在一个很小的Polygon Collider2D图案。也确实跟sprite图形是一样的,但是体积实在是太小了。
collider极其的小
不过既然获取了sprite的点位并且图形样式也是一样的,是不是只要调整大小就能匹配了。于是我又遍历了PolygonCollider2D的Point并放大对应的数值,结果真的匹配的差不多,调整放大的数值即可

调整后的PolygonCollider2D基本匹配了

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class test : MonoBehaviour
{
  
    PolygonCollider2D poly2D;
    Vector2[] pos_save;//存放PolygonCollider2D的Point点位
    public float identity =100f;
    // Start is called before the first frame update
    void Start()
    {
        poly2D = GetComponent<PolygonCollider2D>();

        SetPos();
    }
    void SetPos()
    {
        pos_save = poly2D.GetPath(0);
        for (int i = 0; i < pos_save.Length; i++)
        {
            pos_save[i] = pos_save[i] * identity;
        }
        poly2D.SetPath(0, pos_save);
    }

}

这个难度并不是很高,希望对新人有一点帮助吧!

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值