[UGUI]修改顶点
参考链接:
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]修改顶点的更多相关文章
- 在Unity中使用UGUI修改Mesh绘制几何图形
在商店看到这样一个例子,表示很有兴趣,他们说是用UGUI做的.我想,像这种可以随便变形的图形,我第一个就想到了网格变形. 做法1: 细心的朋友应该会发现,每个UGUI可见元素,都有一个‘Canvas ...
- unity5.5 ugui使用美术字
文件转载自:http://www.jianshu.com/p/a4e6d1ca3ca0 项目需要使用美术字加强战斗效果表现,按以往NGUI的使用经验,这个应该很简单,随便Google一下都有数篇技术博 ...
- UGUI 文字效果实现(Shadow\Gradient\Outline)
NGUI直接在UILabel组件中接入了Shadow.Gradient和outline选项,但在UGUI中是通过另外的组件单独提供,比如outline.shader等.这篇文章主要记录这几个文字效果实 ...
- 基于Shader实现的UGUI描边解决方案
基于Shader实现的UGUI描边解决方案 前言 大扎好,我系狗猥.当大家都以为我鸽了的时候,我又出现了,这也是一种鸽.创业两年失败后归来,今天想给大家分享一个我最近研究出来的好康的,比游戏还刺激,还 ...
- ugui的优化
参考文章 https://www.jianshu.com/p/061e67308e5f https://www.jianshu.com/p/8a9ccf34860e http://blog.jobbo ...
- (转)Unity 之 UGUI 小总结
转自:http://www.jianshu.com/p/5b6f5022662e 开发过程中对UGUI的一个小总结. 首先从原画师拿到效果图,美术切图,拿到碎图后打成大图. 我们先来说一下图:RGBA ...
- UGUI性能优化
http://www.cnblogs.com/suoluo/p/5417152.html http://blog.csdn.net/uwa4d/article/details/54344423 htt ...
- 关于Unity中的UGUI优化,你可能遇到这些问题
https://blog.uwa4d.com/archives/QA_UGUI-1.html 关于Unity中的UGUI优化,你可能遇到这些问题 作者:admin / 时间:2016年11月08日 / ...
- UGUI表情系统&超链接解决方案
最近帮一个同事解决图文混排的问题,发现了一种犀利的UGUI表情系统的解决方案 https://blog.uwa4d.com/archives/Sparkle_UGUI.html 使用重新生成UGUI文 ...
随机推荐
- Spring Boot基础知识
Spring Boot 是微服务中最好的 Java 框架. 我们建议你能够成为一名 Spring Boot 的专家. 问题一 Spring Boot.Spring MVC 和 Spring 有什么区别 ...
- elasticsearch 基本操作
安装delete_by_query ,cd进/bin,执行./plugin install delete-by-query DELETE http://192.168.1.12:9200/dd ...
- Linux 如何测试 IO 性能(磁盘读写速度)
这几天做MySQL性能测试,偌大一个公司,找几台性能测试机器都很纠结,终于协调到两台,IO的性能如何还不知道.数据库属于IO密集型的应用,所以还是先评估下Server的IO性能,看看是否能和线上的机器 ...
- ManualResetEvent学习实例
ManualResetEvent为多个线程之间提供了一个共享的信号. 初始化:ManualResetEvent mre=new ManualResetEvent(true) 初始值为true表示有信号 ...
- 打开word文档总是自动弹出控件工具条的解决办法:
打开word文档总是自动弹出控件工具条的解决办法:1.查看是否word文档和模板中了'apmp宏病毒,按ALT+F11组合键,双击当前文档下属的ThisDocument,清空里面的内容:双击Norma ...
- Java HashMap的死循环 以及 LRUCache的正确实现
今天RP爆发,16核服务器load飙到30多,cpu使用情况全部99%以上. 从jstack中分析发现全部线程都堵在map.transfer处,如下: "pool-10-thread-23& ...
- P1226快速幂取余
链接:https://www.luogu.org/problemnew/show/P1226 题解:(重要结论:(a*b*c*d*...*n)%k=[(a%k)*(b%k)*...(n%k)]%k) ...
- java1.8新特性(三 关于 ::的用法)
java1.8 推出了一种::的语法 用法 身边 基本没人用1.8的新API 目前 我也是只处于学习 运用 阶段 有点 知其然不知其所以然 通过后面的学习,及时查漏补缺 一个类中 有 静态方法 ,非静 ...
- Java-Runoob-高级教程-实例-方法:11. Java 实例 – enum 和 switch 语句使用
ylbtech-Java-Runoob-高级教程-实例-方法:11. Java 实例 – enum 和 switch 语句使用 1.返回顶部 1. Java 实例 - enum 和 switch 语句 ...
- SkipList理解
记下自己对跳表SkipList的理解. SkipList采用空间换时间的思想,通过增加数据间的链接,达到加快查找速度的目的. 数据库LevelDB和RocksDB中用到了SkipList,Redis中 ...