在一个项目中需要对衣服部位进行颜色填充,由于衣服每个部位都是不规则的图形,所以我采用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图形是一样的,但是体积实在是太小了。
不过既然获取了sprite的点位并且图形样式也是一样的,是不是只要调整大小就能匹配了。于是我又遍历了PolygonCollider2D的Point并放大对应的数值,结果真的匹配的差不多,调整放大的数值即可
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);
}
}
这个难度并不是很高,希望对新人有一点帮助吧!