参考链接:

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

说明:unity版本5.3,新建一个Image,挂上以下的脚本

一.图形绘制

1.绘制三角形

 using UnityEngine;
using UnityEngine.UI; public class TestMesh : BaseMeshEffect { public override void ModifyMesh(VertexHelper vh)
{
vh.Clear();
vh.AddVert(new Vector3(, ), Color.red, Vector2.zero);
vh.AddVert(new Vector3(, ), Color.green, Vector2.zero);
vh.AddVert(new Vector3(, ), Color.black, Vector2.zero);
vh.AddTriangle(, , );
}
}

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

 using UnityEngine;
using UnityEngine.UI; public class TestMesh : BaseMeshEffect { public override void ModifyMesh(VertexHelper vh)
{
vh.Clear();
vh.AddVert(new Vector3(, ), Color.red, Vector2.zero);
vh.AddVert(new Vector3(, ), Color.green, Vector2.zero);
vh.AddVert(new Vector3(, ), Color.black, Vector2.zero);
vh.AddVert(new Vector3(, ), Color.blue, Vector2.zero);
vh.AddTriangle(, , );
vh.AddTriangle(, , );
}
}

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

 using UnityEngine;
using UnityEngine.UI; public class TestMesh : BaseMeshEffect { public override void ModifyMesh(VertexHelper vh)
{
vh.Clear();
UIVertex[] verts = new UIVertex[]; verts[].position = new Vector3(, );
verts[].color = Color.red;
verts[].uv0 = Vector2.zero; verts[].position = new Vector3(, );
verts[].color = Color.green;
verts[].uv0 = Vector2.zero; verts[].position = new Vector3(, );
verts[].color = Color.black;
verts[].uv0 = Vector2.zero; verts[].position = new Vector3(, );
verts[].color = Color.blue;
verts[].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(, ), Color.red, Vector2.zero);
vh.AddVert(new Vector3(, ), Color.green, Vector2.zero);
vh.AddVert(new Vector3(, ), Color.black, Vector2.zero);
vh.AddVert(new Vector3(, ), Color.blue, Vector2.zero);
vh.AddTriangle(, , );
vh.AddTriangle(, , ); //顶点有4个,索引有6个
Debug.Log(vh.currentIndexCount);
Debug.Log(vh.currentVertCount); //PopulateUIVertex,返回顶点数据。当前取值范围:0-3
UIVertex vertex = new UIVertex();
vh.PopulateUIVertex(ref vertex, );
Debug.Log(vertex.color);
vh.PopulateUIVertex(ref vertex, );
Debug.Log(vertex.color); //SetUIVertex,设置顶点数据
vertex.color = Color.yellow;
vh.SetUIVertex(vertex, );
}
}

输出:

Stream流批量操作:

1.AddUIVertexStream,批量添加顶点

 using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI; public class TestMesh : BaseMeshEffect { public override void ModifyMesh(VertexHelper vh)
{
vh.Clear();
List<UIVertex> verts = new List<UIVertex>(); UIVertex vert0 = new UIVertex();
vert0.position = new Vector3(, );
vert0.color = Color.red;
vert0.uv0 = Vector2.zero;
verts.Add(vert0); UIVertex vert1 = new UIVertex();
vert1.position = new Vector3(, );
vert1.color = Color.green;
vert1.uv0 = Vector2.zero;
verts.Add(vert1); UIVertex vert2 = new UIVertex();
vert2.position = new Vector3(, );
vert2.color = Color.black;
vert2.uv0 = Vector2.zero;
verts.Add(vert2); UIVertex vert3 = new UIVertex();
vert3.position = new Vector3(, );
vert3.color = Color.blue;
vert3.uv0 = Vector2.zero;
verts.Add(vert3); List<int> indices = new List<int>() { , , , , , };
vh.AddUIVertexStream(verts, indices);
}
}

2.AddUIVertexTriangleStream,批量添加三角形顶点,长度必须是3的倍数

 using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI; public class TestMesh : BaseMeshEffect { public override void ModifyMesh(VertexHelper vh)
{
vh.Clear();
List<UIVertex> verts = new List<UIVertex>(); UIVertex vert0 = new UIVertex();
vert0.position = new Vector3(, );
vert0.color = Color.red;
vert0.uv0 = Vector2.zero;
verts.Add(vert0); UIVertex vert1 = new UIVertex();
vert1.position = new Vector3(, );
vert1.color = Color.green;
vert1.uv0 = Vector2.zero;
verts.Add(vert1); UIVertex vert2 = new UIVertex();
vert2.position = new Vector3(, );
vert2.color = Color.black;
vert2.uv0 = Vector2.zero;
verts.Add(vert2); vh.AddUIVertexTriangleStream(verts);
}
}

3.GetUIVertexStream,获取所有顶点数据

 using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI; public class TestMesh : BaseMeshEffect { public override void ModifyMesh(VertexHelper vh)
{
vh.Clear(); vh.AddVert(new Vector3(, ), Color.red, Vector2.zero);
vh.AddVert(new Vector3(, ), Color.green, Vector2.zero);
vh.AddVert(new Vector3(, ), Color.black, Vector2.zero);
vh.AddTriangle(, , ); List<UIVertex> stream = new List<UIVertex>();
vh.GetUIVertexStream(stream);
foreach (UIVertex v in stream)
{
Debug.Log(v.color);
}
}
}

[UGUI]修改顶点的更多相关文章

  1. 在Unity中使用UGUI修改Mesh绘制几何图形

    在商店看到这样一个例子,表示很有兴趣,他们说是用UGUI做的.我想,像这种可以随便变形的图形,我第一个就想到了网格变形. 做法1: 细心的朋友应该会发现,每个UGUI可见元素,都有一个‘Canvas ...

  2. unity5.5 ugui使用美术字

    文件转载自:http://www.jianshu.com/p/a4e6d1ca3ca0 项目需要使用美术字加强战斗效果表现,按以往NGUI的使用经验,这个应该很简单,随便Google一下都有数篇技术博 ...

  3. UGUI 文字效果实现(Shadow\Gradient\Outline)

    NGUI直接在UILabel组件中接入了Shadow.Gradient和outline选项,但在UGUI中是通过另外的组件单独提供,比如outline.shader等.这篇文章主要记录这几个文字效果实 ...

  4. 基于Shader实现的UGUI描边解决方案

    基于Shader实现的UGUI描边解决方案 前言 大扎好,我系狗猥.当大家都以为我鸽了的时候,我又出现了,这也是一种鸽.创业两年失败后归来,今天想给大家分享一个我最近研究出来的好康的,比游戏还刺激,还 ...

  5. ugui的优化

    参考文章 https://www.jianshu.com/p/061e67308e5f https://www.jianshu.com/p/8a9ccf34860e http://blog.jobbo ...

  6. (转)Unity 之 UGUI 小总结

    转自:http://www.jianshu.com/p/5b6f5022662e 开发过程中对UGUI的一个小总结. 首先从原画师拿到效果图,美术切图,拿到碎图后打成大图. 我们先来说一下图:RGBA ...

  7. UGUI性能优化

    http://www.cnblogs.com/suoluo/p/5417152.html http://blog.csdn.net/uwa4d/article/details/54344423 htt ...

  8. 关于Unity中的UGUI优化,你可能遇到这些问题

    https://blog.uwa4d.com/archives/QA_UGUI-1.html 关于Unity中的UGUI优化,你可能遇到这些问题 作者:admin / 时间:2016年11月08日 / ...

  9. UGUI表情系统&超链接解决方案

    最近帮一个同事解决图文混排的问题,发现了一种犀利的UGUI表情系统的解决方案 https://blog.uwa4d.com/archives/Sparkle_UGUI.html 使用重新生成UGUI文 ...

随机推荐

  1. linux项目部署常用命令

    原文出处:http://blog.csdn.net/u013628152/article/details/45847013 1:执行命令#find / -name tomcat,系统将列出所有tomc ...

  2. linux环境下python的pdb调试方法

    一些常用指令: h(elp) [comman]  #打印可用指令及帮助信息 r(eturn)  #运行代码直到下一个断点或当前函数返回 b(reak) [[filename:]lineno | fun ...

  3. msp430学习笔记-ADC12

    本文引用:http://bbs.ednchina.com/BLOG_ARTICLE_3013748.HTM MSP430单片机的ADC12模块是一个12位精度的A/D转换模块,它具有高速度,通用性等特 ...

  4. JS 动态加载脚本的4种方法

    有时候我们需要动态的加入适合的js,因为有时候不需要将所有的js都加载进来,以来提高效率,但这种方法比较适合单个js文件比较大的情况 如果js文件都比较小,还是一个js好,这样可以减少连接数.下面是4 ...

  5. 荣耀9少 gms core服务

    1.首先安装gms core即本软件gms安装器,安装时候会重启一次. gms core apk下载地址:http://www.paopaoche.net/android/307559.html 注意 ...

  6. 阿里巴巴Dubbo实现的源码分析

    1.      Dubbo概述 Dubbo是阿里巴巴开源出来的一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及作为SOA服务治理的方案.它的核心功能包括: #remoting ...

  7. 跟着未名学Office – 整体了解 Ms Office 2010

    目录 MS Office 2010    2 Microsoft Office System    2 Ribbon(功能区)    2 文件选项卡    3 SmartArt    3 屏幕截图   ...

  8. g6 cavans

    { // 默认模式 default: [ 'dragNode', 'dragEdge', 'dragBlank', 'clickBlankClearActive', 'resizeEdge', 'cl ...

  9. Espresso 开源了

    Google Testing Blog上发布了一篇博客,Espresso 开源了 http://googletesting.blogspot.com/2013/10/espresso-for-andr ...

  10. shell文件描述符和重定向

    1.文件描述符是与一个打开的文件或数据流相关联的整数.文件描述符0,1,2是系统预留的. 0 --------stdin(标准输入) 1 --------stdout(标准输出) 2--------- ...