Unity 自己使用顶点描绘圆形UI图片
2020-09-10
在游戏的UI中,圆形图片的需求是很高的,但是,在Unity中想要实现圆形UI,一般的做法是是使用圆形Mask(遮罩),但是使用Mask的缺点很明显,主要有三点:
1.比较麻烦,使游戏对象管理变得更复杂
2.效果不佳(质量难以把控),比如说有锯齿
3.性能问题
那么来实现自己的圆形UI效果是很重要的
效果:
步骤:
在Canvas上创建一个空物体
新建脚本 CircleImage.cs 将CircleImage类继承Image类
然后接下来则是具体的思路:
完成!将组件添加到空对象上,并添加想要看的精灵图片,效果如开头所示。
完整脚本CircleImage.cs(代替Image):
1 using UnityEngine;
2 using UnityEngine.Sprites;
3 using UnityEngine.UI;
4
5 public class CircleImage : Image
6 {
7 /// <summary>
8 /// 圆形由多少个三角形组成
9 /// </summary>
10 private int segement = 100;
11
12 protected override void OnPopulateMesh(VertexHelper vh)
13 {
14 vh.Clear();
15
16 float width = rectTransform.rect.width;
17 float height = rectTransform.rect.height;
18
19 Vector4 uv = overrideSprite != null ? DataUtility.GetOuterUV(overrideSprite) : Vector4.zero;
20 float uv_width = uv.z - uv.x;
21 float uv_height = uv.w - uv.y;
22 Vector2 uvCenter = new Vector2(uv_width * 0.5f, uv_height * 0.5f);
23 Vector2 convertRatio = new Vector2(uv_width / width, uv_height / height);
24
25 float radian = 2 * Mathf.PI / segement;
26 float radius = width * 0.5f;
27
28 UIVertex origin = new UIVertex();
29 origin.color = color;
30 origin.position = Vector3.zero;
31 origin.uv0 = new Vector2(origin.position.x * convertRatio.x + uvCenter.x, origin.position.y * convertRatio.y + uvCenter.y);
32 vh.AddVert(origin);
33
34 int vertexCount = segement + 1;
35 float curRadian = 0;
36 for (int i = 0; i < vertexCount; i++)
37 {
38 float x = Mathf.Cos(curRadian) * radius;
39 float y = Mathf.Sin(curRadian) * radius;
40 curRadian += radian;
41
42 UIVertex vertexTemp = new UIVertex();
43 vertexTemp.color = color;
44 vertexTemp.position = new Vector2(x, y);
45 vertexTemp.uv0 = new Vector2(vertexTemp.position.x * convertRatio.x + uvCenter.x, vertexTemp.position.y * convertRatio.y + uvCenter.y);
46 vh.AddVert(vertexTemp);
47 }
48
49 int id = 1;
50 for (int i = 0; i < segement; i++)
51 {
52 vh.AddTriangle(id, 0, id + 1);
53 id++;
54 }
55 }
56 }
Unity 自己使用顶点描绘圆形UI图片的更多相关文章
- unity中把一个图片切割成两个UI图片
1.在unity3D的Project视图下选中需要更改的图片,将图片的Texture Type更改为Sprite (2D and UI),点击Apply即可.操作如图所示: 2.完成步骤一,点击App ...
- 25 The Go image/draw package go图片/描绘包:图片/描绘包的基本原理
The Go image/draw package go图片/描绘包:图片/描绘包的基本原理 29 September 2011 Introduction Package image/draw de ...
- Android 圆形/圆角图片的方法
Android 圆形/圆角图片的方法 眼下网上有非常多圆角图片的实例,Github上也有一些成熟的项目.之前做项目,为了稳定高效都是选用Github上的项目直接用.但这样的结束也是Android开发必 ...
- 安卓图片载入之使用universalimageloader载入圆形圆角图片
前言 话说这universalimageloader载入图片对搞过2年安卓程序都是用烂了再熟悉只是了.就是安卓新手也是百度就会有一大堆东西出来,今天为什么这里还要讲使用universalimagelo ...
- Unity项目UI图片压缩格式(UGUI)
http://blog.csdn.net/bobodan123/article/details/70316538 UI制作时候使用的是Ps 8位 RGB通道的色彩. 但导出的是16位RGBA色彩的图片 ...
- Android实现圆形圆角图片
本文主要使用两种方法实现图形圆角图片 自定View加上使用Xfermode实现 Shader实现 自定View加上使用Xfermode实现 /** * 根据原图和变长绘制圆形图片 * * @param ...
- GDI+ 如何将图片绘制成圆形的图片
大概意思就是不生成新的图片,而是将图片转换为圆形图片. 实现代码如下: private Image CutEllipse(Image img, Rectangle rec, Size size) { ...
- Android手机适配——UI图片适配
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/50727753 在Android项目当中,drawable文件夹都是用来放置图片资源 ...
- 猫学习IOS(三)UI纯代码UI——图片浏览器
猫分享.必须精品 看看效果 主要实现相似看新闻的一个界面,不用拖拽,纯代码手工写. 首先分析app能够非常easy知道他这里有两个UILabel一个UIImageView还有两个UIButton 定义 ...
随机推荐
- 文章目录&友情链接
文章目录&友情链接 1:<公告:本博客开始写博文了> 2.本人网络图书馆
- Hive学习目录
大数据之Hive学习目录 第 1 章 Hive入门 1.1 什么是Hive 1.2 Hive的优缺点 1.2.1 优点 1.2.2 缺点 1.3 *Hive架构原理 1.4 Hive和数据库比较 第 ...
- 第2章 执行SparkSQL查询
第2章 执行SparkSQL查询 2.1 命令行查询流程 打开Spark shell 例子:查询大于30岁的用户 创建如下JSON文件,注意JSON的格式: {"name":&qu ...
- 要有一颗理财的心 - 读<富爸爸.穷爸爸>
记得工作没多久后的一次加薪的例行谈话.部门经理和我说,不能靠工资过日子,要多想想怎么投资,我的主要财富就是靠投资赚来的.当时第一反应,老板,你不给我加薪找这借口也太牵强了吧.我的收入只有工资,我的工资 ...
- 数据隐私和GDPR
近十几年来,随着大数据给各行各业带来的变化,以及数据时代不断强调的数据就是燃料,谁掌握数据谁就掌握未来的各种论调,大家纷纷开始收集数据,挖掘数据,转卖数据.而个人,作为数据真正拥有者的利益早就在商业利 ...
- 仿京东BOE官网 JavaScript代码
let items = document.getElementsByClassName('item'); let points = document.getElementsByClassName('p ...
- Java数据结构——2-3树
定义2-3树是平衡的3路查找树,其中2(2-node)是指拥有两个分支的节点,3(3-node)是指拥有三个分支的节点.B-树是一种平衡的多路查找树,2-3树属于b-树,其也同样具有B-树的性质,如m ...
- Flying Pages:在单击之前预加载页面,打开网页快得飞起
Flying Pages能够实现:在用户点击网页的链接之前,就预加载这个网页,当再点击这个网页时,页面便能飞速打开,能为网站优化加分.接下来,就由LOYSEO来讲解Flying Pages的使用方法. ...
- vue再学习
day01 Vue 是什么? Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架 vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合 使用Vu ...
- Selenium中核心属性以及方法
一.操作定位元素 selenium提供了定位元素的API,这些方法都被定义在webDriver类中,需要以find开头, 例如:find_Element_by_id('')