Unity绘制Mesh

Unity中代码绘制Mesh

Fraphic

Unity所有可视UI组建的基类。

如果你想要在Unity创建一个UI组建,都会自动继承该类。

例子:

using UnityEngine;
using UnityEngine.UI;

[ExecuteInEditMode]
public class graphic : Graphic
{
    protected override void OnPopulateMesh(VertexHelper vh)
    {
        Vector2 corner1 = Vector2.zero;
        Vector2 corner2 = Vector2.zero;

        corner1.x = 0f;
        corner1.y = 0f;
        corner2.x = 1f;
        corner2.y = 1f;

        corner1.x -= rectTransform.pivot.x;
        corner1.y -= rectTransform.pivot.y;
        corner2.x -= rectTransform.pivot.x;
        corner2.y -= rectTransform.pivot.y;

        corner1.x *= rectTransform.rect.width;
        corner1.y *= rectTransform.rect.height;
        corner2.x *= rectTransform.rect.width;
        corner2.y *= rectTransform.rect.height;

        vh.Clear();

        UIVertex vert = UIVertex.simpleVert;

        vert.position = new Vector2(corner1.x, corner1.y);
        vert.color = color;
        vh.AddVert(vert);

        vert.position = new Vector2(corner1.x, corner2.y);
        vert.color = color;
        vh.AddVert(vert);

        vert.position = new Vector2(corner2.x, corner2.y);
        vert.color = color;
        vh.AddVert(vert);

        vert.position = new Vector2(corner2.x, corner1.y);
        vert.color = color;
        vh.AddVert(vert);

        vh.AddTriangle(0, 1, 2);
        vh.AddTriangle(2, 3, 0);
    }
}


在这里我们需要解释的如下:

[ExecuteInEditMode]

         普通的类,加上ExecuteInEditMode, 就可以在编辑器模式中运行。

OnPopulateMesh

         Callback function when a UI element needs to generate vertices.

VertexHelper

一个帮助用户为UI创建mesh的有用的类。

该类执行完毕之后会自动释放内存空间。

using UnityEngine;
using UnityEngine.UI;

public class ExampleClass : MonoBehaviour
{
    Mesh m;

    void Start()
    {
        Color32 color32 = Color.red;
        using (var vh = new VertexHelper())
        {
            vh.AddVert(new Vector3(0, 0), color32, new Vector2(0f, 0f));
            vh.AddVert(new Vector3(0, 100), color32, new Vector2(0f, 1f));
            vh.AddVert(new Vector3(100, 100), color32, new Vector2(1f, 1f));
            vh.AddVert(new Vector3(100, 0), color32, new Vector2(1f, 0f));

            vh.AddTriangle(0, 1, 2);
            vh.AddTriangle(2, 3, 0);
            vh.FillMesh(m);
        }
    }
}

UIVertex.simpleVert

         在UI系统中使用的简单的UIVertex与合理的设置。

总结:

Unity官方文档中讲的还是比较详尽的,对这方面有需要的童鞋可以找个时间去看一下,应该会有不小的收获。这里给大家留一个入口:Unity - Scripting API Graphic

发布了13 篇原创文章 · 获赞 9 · 访问量 8256

猜你喜欢

转载自blog.csdn.net/qq_39025293/article/details/87600850