Unity UGUI绘制任意形状的基础——在代码中通过顶点绘制正方形

目标

在代码中通过顶点绘制正方形。基于这一技术,可以通过提供更多顶点绘制出任意形状。

环境

  • Unity 2018.1.5f1 Personal (64bit)

方法

继承 UnityEngine.UI.Graphic 来获得顶点操纵的能力:

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

public class UIMeshLine : Graphic
{

    protected override void OnPopulateMesh(VertexHelper vh)
    {
        base.OnPopulateMesh(vh);
        vh.Clear(); // 清除Graphic默认提供的正方形
        var vertices = new UIVertex[4];
        //var p0 = new UIVertex();
        for (var i = 0; i < 4; i++)
        {

            vertices[i].color = color; // 设置颜色为 Inspector 中色条的颜色,也可以随便设置。比如 Color.green
        }
        // 上方缺角的正方形
        //vertices[0].position = new Vector3(100, 100);
        //vertices[1].position = new Vector3(100, 120);
        //vertices[2].position = new Vector3(120, 100);
        //vertices[3].position = new Vector3(120, 120);

        // 正方形
        vertices[0].position = new Vector3(100, 100);
        vertices[1].position = new Vector3(120, 100);
        vertices[2].position = new Vector3(120, 120);
        vertices[3].position = new Vector3(100, 120);

        // 正方形
        //vertices[3].position = new Vector3(100, 100);
        //vertices[2].position = new Vector3(120, 100);
        //vertices[1].position = new Vector3(120, 120);
        //vertices[0].position = new Vector3(100, 120);

        Debug.Log("Current vertices count: " + vh.currentVertCount);
        vh.AddUIVertexQuad(vertices);
        Debug.Log("Modified vertices count: " + vh.currentVertCount);
    }
}

效果:

OnPopulateMesh 是 Graphic 提供的虚方法,会由 Unity 调用。

UGUI的渲染体系。 简单来说,就是一个CanvasRenderer进行绘制,所有的控件和可显示的元素都是Graphic。Graphic持有一个canvasRenderer,通过SetVertices设置顶点,最终完成绘制。

设置的顶点格式是 UIVertex,包含 position、normal、color、uv0 等属性。最关键的就是 position,一般传一个点的坐标是相对于它自己的坐标系的像素坐标,不是全局坐标,也不是相对于父节点的坐标。举例来说,一张 100*100 的图片,锚点为(0.5,0.5),rect transform 的 position 是 (0, 0),那么它的四个UIVertex的值分别为 (-50, -50) (-50, 50) (50, 50) (50, -50),其全局坐标则要加上 rect transform 的 position 值。

还有一个需要注意的是,SetVertices中设置的顶点数目必须是4的倍数,因为 UGUI 的绘制元素是四边形 Quad 而不是三角形。

参考

发布了189 篇原创文章 · 获赞 85 · 访问量 62万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览