ugui

UGUI界面优化记录

戏子无情 提交于 2020-04-03 19:53:31
UGUI界面优化记录 1、在不影响界面效果的情况下,Image去掉FillCenter,减少overdraw 上面两个图是勾上和勾掉后的overdraw对比 2、RaycastTarget用不到的不勾选 在不需要用到RaycastTarget的Text和Image都勾掉!减少不必要的开销! 3、隐藏画布尽量用禁用Canvas的方式 禁用Canvas组件会阻止画布向GPU发起绘图调用,所以该画布不再可见。然而,此时该画布不会丢弃它的顶点缓冲区,它会保留所有网格和顶点,当重新启用时不会触发重构过程,它只会重新绘制画布内容。 此外,禁用Canvas组件不会触发Canvas层级上性能消耗较大的OnDisable/OnEnable回调。禁用子组件时要小心,注意它是否运行性能消耗较大的每帧代码。 来源: https://www.cnblogs.com/woodjay/p/12628293.html

为UGUI的Image提供图片翻转功能

僤鯓⒐⒋嵵緔 提交于 2020-03-17 00:31:48
使用了NGUI多年,最终还是转入UGUI门下,刚一上手就发现了一个小问题,没找到图片翻转功能。网上查阅一番,确实没有,那么只好自己造轮子了。 既然两个UI工具开发者相同,那么代码应该也类似,打开我心爱的Rider编辑器(至于为什么又用回Rider,因为它足够强),随便写个Image的变量定义,然后跳转到声明处,Image类源码就展现出来了,不用切源码项目看源码,真香! 先说一下翻转图片的做法原理,一个Image其实就是一个模型片,普通模式的Image就是由4个顶点2个三角形组成的(当然九宫格等模式会复杂喝多)。如果需要左右翻转,我们可以左右翻转所有顶点(翻过来显示背面),也可以左右翻转所有顶点的UV(仅限顶点对称的情况下,比如九宫格就不合适)。所以翻转顶点就是我们要做的事情,我们来看代码。 有源码就是好,很快就锁定了方法OnPopulateMesh(),长成这样还是个override,必定有妖异: /// <summary> /// Update the UI renderer mesh. /// </summary> protected override void OnPopulateMesh(VertexHelper toFill) { if (activeSprite == null) { base.OnPopulateMesh(toFill); return; }

UGUI 事件系统

廉价感情. 提交于 2020-03-11 12:20:55
当我们在场景中创建任一UI对象后,Hierarchy面板中都可以看到系统自动创建了EventSystem对象,EventSystem对象负责管理所有事件相关对象,该对象下挂载了EventSystem组件和StandaloneInputModule组件,前者为管理脚本,后者为输入模块。Canvas对象下挂载了GraphicRaycaster负责处理射线相关运算,用户的操作都会通过射线检测来映射到UGUI组件上,InputModule将用户的操作转化为射线检测,Raycaster则找到目标对象并通知EventSystem,最后EventSystem发送事件让目标对象进行响应。 总结来说就是:EventSystem负责管理,BaseInputModule负责输入,BaseRaycaster负责确定目标对象,目标对象负责接收事件并处理,然后一个完整的事件系统就有了 一:EventSystem事件系统 一个场景中只能有一个EventSystem组件 ——First Selected:第一次默认选择的物体 ——Send Navigation Events:是否可以使用导航事件(键盘上下左右)控制 ——Drag Threshold:视为拖拽操作的最小距离 二:EventInterface事件接口 (实现Tooltip) ——IPointerEnterHandler 鼠标进入时响应 —

UGUI之修改Text字间距

。_饼干妹妹 提交于 2020-03-10 08:33:09
using UnityEngine; using System.Collections; using UnityEngine.UI; using System; using System.Collections.Generic; public class Line { private int _startVertexIndex = 0; /// <summary> /// 起点索引 /// </summary> public int StartVertexIndex { get { return _startVertexIndex; } } private int _endVertexIndex = 0; /// <summary> /// 终点索引 /// </summary> public int EndVertexIndex { get { return _endVertexIndex; } } private int _vertexCount = 0; /// <summary> /// 该行占的点数目 /// </summary> public int VertexCount { get { return _vertexCount; } } public Line(int startVertexIndex,int length) { _startVertexIndex =

【Unity笔记】UGUI的Image、RawImage控件

别来无恙 提交于 2020-03-07 18:41:45
Image控件只能使用Sprite图片,RawImage通常使用Texture类型图片。项目设为2D模式后导入的图片Texture Type会自动转为Sprite。 没有选择源图片时,可以只选择颜色。 关于Image Type: Simple:图片根据控件宽高自动拉伸,宽高比可变。 Sliced:九宫图。需要给原图编辑九宫图的切割线后才能用。 Tiled:瓦片。图片按原宽高布局,根据控件的大小,能以重复瓦片的形式填满控件,或者只显示原图的一部分。 Filled:填充。可以选择填充方式(水平/垂直/弧形角度),填充开始方向,填充比例。可用于制作进度条。 Preserve Aspect:是否保持原图宽高比例。勾选后图片根据控件宽高自动缩放(Shrink),宽高比保持不变。 Set Native Size:图片变为原图大小宽高。 来源: https://www.cnblogs.com/guxin/p/unity-ugui-image-and-rawimage.html

UGUI组件(1)Canvas 和 RectTransform

佐手、 提交于 2020-03-07 18:41:00
版本:Unity5.4.2f1 Canvas(画布) 手册: https://docs.unity3d.com/Manual/class-Canvas.html 这个组件是代表UI布局和渲染的空间。所有UI元素必须是在一个有Canvas组件的对象下。当在没有Canvas场景中创建一个UI元素时,同时也会生成一个Canvas对象。 参数: Pixel Perfect (Screen Space modes only) :不使用反锯齿渲染UI Render Camera (Screen Space - Camera mode only) :选择一个绘制UI的摄像机 Plane Distance (Screen Space - Camera mode only) :放置UI平面在摄像机前面的距离大小 Event Camera (World Space mode only) :处理UI事件的摄像机 Receives Events :是否通过该摄像机处理UI事件 补充: 一个场景中只有一个Canvas是足够的,但也允许同时存在多个Canvas。也可以嵌套多个Canvas,但嵌套的Canvas是和父级的渲染方式一样。 嵌套的Canvas截图: 通常是把UI元素作为一个绘制在屏幕上的图形,而没有把UI元素当作为一个3D空间内的对象。 在Unity中不仅支持使用传统的渲染概念

UGUI 优化

南楼画角 提交于 2020-02-07 02:33:59
一、Raycast Target 众所周知,UGUI中的响应鼠标点击事件,是通过勾选RaycastTarget,来接收射线。如组件Button、Image、Text、Toggle、InputField、ScrollView等。以Image为例: 当Unity运行时,Unity会遍历所有当前已经勾选的Raycast Target的组件,找到当前点击位置的最上层的组件来作为当前点击的响应点。所以场景中勾选太多的Raycast Target的组件的话,会降低游戏运行的效率。并且有可能会遮挡需要被点击的物体(因为层级问题)。并且Unity在创建组件如Image、RawImage、Text、Button(里外两个)等,Raycast Target默认是勾选的。 二、打包图集 https://blog.csdn.net/qq_38721111/article/details/79870373 三、OverDraw (1)、首先创建两个Button不重叠组件,看Batches(批处理的数量为4)。 然后再看一下两个Button组件重叠的显示: 由此可见同层级之间物件如果重叠会增加CPU的渲染次数,所以同层级之间物体尽量不要重叠。 (2)、Image中有一些中部镂空的背景图片,理论上中部是不需要去绘制的,但是即使他中部被设置成透明,也会被渲染,做法是将Image组件上的FillCenter取消勾选

Unity UGUI基础之Toggle

不羁岁月 提交于 2020-02-02 04:46:03
Toggle组合按钮(单选框),可以将多个Toggle按钮加入一个组,则他们之间只能有一个处于选中状态(Toggle组合不允许关闭的话)。 一、Toggle组件: Toggle大部分属性等同于Button组件,同为按钮,不同的只是他自带了组合切换功能,当然这些用Button也是可以实现的。 Is On(选中):此Toggle的初始值是否选中。 Toggle Transition(切换过渡):None为无切换过渡,Fade为切换时Graphic所指目标渐隐渐显。 Group(所属组合):这里指向一个带有Toggle Group组件的任意目标,将此Toggle加入该组合,之后此Toggle便会处于该组合的控制下,同一组合内只能有一个Toggle可处于选中状态,即便是初始时将所有Toggle都开启Is On,之后的选择也会自动保持单一模式。 On Value Changed(状态改变触发消息):当此Toggle选中状态改变时,触发一次此消息。 二、Toggle Group组件: Allow Switch Off(允许关闭):Toggle Group组和默认有且仅有一个Toggle可处于选中状态,如果勾选此属性,则Toggle Group组和的所有Toggle都可同时处于未选中状态。 来源: https://www.cnblogs.com/liang123/p/6325876.html

UGUI Toggle控件

跟風遠走 提交于 2020-02-02 03:55:39
今天我们来看看Toogle控件, 它由Toogle + 背景 + 打勾图片 + 标签组成的. 它主要用于单选和多选 属性讲解: Is On: 代表是否选中. Toogle Transition: 在状态改变的时候,是否启动动画,颜色,等等过渡的效果. Graphic: 当选中和取消时候, 显示和隐藏的图片. Group: 代表当前Toggle(选择框)是否属于一个组, 如果属于那么组下的所有的Toogle你只能勾选一个. 如何创建单选框环境呢? 步骤如下: 1. 创建多个Toggle 2. 创建一个物体添加ToggleGroup脚本 (A) . 3. 将A拖动到把想要放在同一个组中的Toogle的属性Group上 ====================================================================== OnValueChanged事件的误区: OnValueChanged事件名字翻译过来当值触发该事件. (很多人认为是当选择框被选择的时候触发) 当多个Toggle成为一组,变成单选框的时候. 点击第1个Toggle, 在点击第2个Toggle.其实第1个Toggle总共会被触发2次.为什么呢? 因为选择会触发事件,取消选择也会被触发(所以事件会叫这个名字OnValueChanged) 1. 通过代码改变IsOn界面是没有任何反应的

uGUI练习(九) Toggle Button

删除回忆录丶 提交于 2020-02-02 03:52:29
练习目标 练习单选框,多选框 Toggle Group:Toggle容器 Toggle:单一的选项 练习步骤 1、创建一个Panel,命名TogglePanel,添加Toggle Group组件,可以看到ToggleGroup面板十分的简洁,那看来Toggle触发的事件要在child下完成了. TogglePanel属性面板 2、在TogglePanel下创建两个Toggle,命名ToggleRed,ToggleBlue,默认创建的Toggle,是这样的 属性面板如下( 属性 标注出了可以拦截的事件 ): 3、在步骤1说过,ToggleGroup并没有提供可设置的属性,所以触发事件要在Toggle下完成了,通过观察Toggle,发现了下面这个事件 Toggle事件示例 4、所以需要我们自己写脚本,来处理Toggle事件啦,创建ToggleScene.cs 绑定在TogglePanel上, using UnityEngine; using System.Collections; using UnityEngine.UI; public class ToggleScene : MonoBehaviour { public Toggle toggle1; void Start() { toggle1.onValueChanged.AddListener(OnValueChanged);