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 定义 ...
随机推荐
- J20航模遥控器开源项目系列教程(一)制作教程 | 基础版V1.0发布,从0到1
我们的开源宗旨:自由 协调 开放 合作 共享 拥抱开源,丰富国内开源生态,开展多人运动,欢迎加入我们哈~ 和一群志同道合的人,做自己所热爱的事! 项目开源地址:https://github.com/C ...
- 大数据理论篇HDFS的基石——Google File System
Google File System 但凡是要开始讲大数据的,都绕不开最初的Google三驾马车:Google File System(GFS), MapReduce,BigTable. 为这一切的基 ...
- http请求工作流程
一.HTTP工作原理 HTTP协议定义Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端.HTTP协议采用了请求/响应模型.客户端向服务器发送一个请求报文,请求报文包 ...
- 牛客网数据库SQL实战解析(1-10题)
牛客网SQL刷题地址: https://www.nowcoder.com/ta/sql?page=0 牛客网数据库SQL实战解析(01-10题): https://blog.csdn.net/u010 ...
- 在使用postman中操作api接口测试403解决方法
在向Jenkins发送请求时收到了这样的403错误信息: No valid crumb was included in the request 后来通过google找到了解决方案. http://st ...
- 谷歌分析(GA)新版的有哪些改变
http://www.wocaoseo.com/thread-221-1-1.html 最近GA做了两次大规模改版,修改了GA使用率最高的traffic source.content面板以及最核心的a ...
- CCAI观后
暑期和大老板的学生一起学了一暑假的计算机视觉和机器学习,以前只是在京畿范围的学校听到的报告和这阵的学习数量级都不同.当时看到了很多人的报告,忽然发现了做报告应该做的准备实际还有很多. 首先是要有充分的 ...
- k8s部署mysql主从复制
Mysql主从 准备环境 一,准备软件 官方docker_image :Mysql5.7.28 Docker Version: 19.03.4 K8s api-version: ...
- Android项目智能机器人的实现,带有源代码,图灵智能机器人,详细讲解。。
大家好,今天给大家推荐一个我利用图灵api制作的android项目,智能机器人,类似智能小冰,等一些会机器人. 下面看效果.女头像是系统自动给你回复的,男头像是你输入的内容.项目源代码是eclipse ...
- java生成四位随机数,包含数字和字母 区分大小写,特别适合做验证码,android开发
private String generateWord() { String[] beforeShuffle = new String[] { "2", "3" ...