Unity 顶点基础 + OnPopulateMesh

本文详细介绍了在Unity中使用UI系统进行图形绘制的方法,包括如何使用BaseMeshEffect类的子类TestMesh绘制三角形和正方形,以及如何利用VertexHelper API进行更高级的图形操作。文章深入探讨了AddVert、AddTriangle、AddUIVertexQuad等关键函数的使用,并展示了如何批量操作顶点和索引数据,以及如何获取和修改顶点属性。

转自:

https://www.cnblogs.com/lyh916/p/9162463.html

https://blog.csdn.net/jk823394954/article/details/53870779

一.图形绘制

1.绘制三角形

using UnityEngine;
using UnityEngine.UI;

public class TestMesh : BaseMeshEffect {

    public override void ModifyMesh(VertexHelper vh)
    {
        vh.Clear();
        vh.AddVert(new Vector3(0, 0), Color.red, Vector2.zero);
        vh.AddVert(new Vector3(0, 100), Color.green, Vector2.zero);
        vh.AddVert(new Vector3(100, 100), Color.black, Vector2.zero);
        vh.AddTriangle(0, 1, 2);
    }
}

2.绘制正方形(绘制两个三角形)

using UnityEngine;
using UnityEngine.UI;

public class TestMesh : BaseMeshEffect {

    public override void ModifyMesh(VertexHelper vh)
    {
        vh.Clear();
        vh.AddVert(new Vector3(0, 0), Color.red, Vector2.zero);
        vh.AddVert(new Vector3(0, 100), Color.green, Vector2.zero);
        vh.AddVert(new Vector3(100, 100), Color.black, Vector2.zero);
        vh.AddVert(new Vector3(100, 0), Color.blue, Vector2.zero);
        vh.AddTriangle(0, 1, 2);
        vh.AddTriangle(2, 3, 0);
    }
}

3.绘制正方形(绘制一个正方形)

using UnityEngine;
using UnityEngine.UI;

public class TestMesh : BaseMeshEffect {

    public override void ModifyMesh(VertexHelper vh)
    {
        vh.Clear();
        UIVertex[] verts = new UIVertex[4];

        verts[0].position = new Vector3(0, 0);
        verts[0].color = Color.red;
        verts[0].uv0 = Vector2.zero;

        verts[1].position = new Vector3(0, 100);
        verts[1].color = Color.green;
        verts[1].uv0 = Vector2.zero;

        verts[2].position = new Vector3(100, 100);
        verts[2].color = Color.black;
        verts[2].uv0 = Vector2.zero;

        verts[3].position = new Vector3(100, 0);
        verts[3].color = Color.blue;
        verts[3].uv0 = Vector2.zero;

        vh.AddUIVertexQuad(verts);
    }
}

二.相关api

using UnityEngine;
using UnityEngine.UI;

public class TestMesh : BaseMeshEffect {

    public override void ModifyMesh(VertexHelper vh)
    {
        vh.Clear();
        vh.AddVert(new Vector3(0, 0), Color.red, Vector2.zero);
        vh.AddVert(new Vector3(0, 100), Color.green, Vector2.zero);
        vh.AddVert(new Vector3(100, 100), Color.black, Vector2.zero);
        vh.AddVert(new Vector3(100, 0), Color.blue, Vector2.zero);
        vh.AddTriangle(0, 1, 2);
        vh.AddTriangle(2, 3, 0);

        //顶点有4个,索引有6个
        Debug.Log(vh.currentIndexCount);
        Debug.Log(vh.currentVertCount);

        //PopulateUIVertex,返回顶点数据。当前取值范围:0-3
        UIVertex vertex = new UIVertex();
        vh.PopulateUIVertex(ref vertex, 0);
        Debug.Log(vertex.color);
        vh.PopulateUIVertex(ref vertex, 3);
        Debug.Log(vertex.color);

        //Se
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值