UGUI制作圆形UI

源代码

使用Mask来制作

创建两个具有父子关系的Image,父物体添加Mask组件,精灵是一个圆形的遮罩,子物体是要显示的图片。
在这里插入图片描述
这样做有两个坏处:
1.圆形UI的锯齿感非常强烈
2.增加了Draw Call
在这里插入图片描述

重写Image组件的OnPopulateMesh方法来实现

我们通过自己计算圆形UI的顶点来实现圆形UI的绘制。当然,这个圆形是通过大量的三角片拼接而成。
toFill就是要绘制这个图形所需要的顶点数据。

    /// <summary>
    /// 圆形由多少个三角块拼成
    /// </summary> 
    [SerializeField]
    private int segements = 100;
    /// <summary>
    /// 显示出来的百分比
    /// </summary>
    [SerializeField]
    private float percent = 1;
    private List<Vector2> _vertexList = new List<Vector2>();
    protected override void OnPopulateMesh(VertexHelper toFill)
    {
   
        toFill.Clear();
        AddVertex(toFill);

        for(int i = 1; i <= segements; i++)
        {
   
            toFill.AddTriangle(i, 0, i + 1);
        }
    }

我们通过AddVertex来想toFill中添加顶点数据,再通过AddTriangle来进行三角形的绘制。

    private void AddVertex(VertexHelper toFill)
    {
   
        //获得Rect长宽和需要显示为亮的三角片的数量
        float width = rectTransform.rect.width;
        float height = rectTransform.rect.height;
        int whiteSegement = (int)(segements * percent);

        //计算原点的uv和uv与长宽的换算关系
        Vector4 uv = overrideSprite != null ? DataUtility.GetOuterUV(overrideSprite
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值