ngui

NGUI 渲染流程深入研究 (UIDrawCall UIGeometry UIPanel UIWidget)

喜你入骨 提交于 2020-03-02 21:15:16
上图是一个简要的 NGUI 的图形工作流程, UIG eometry被UIWidget实例化之后,通过 UIW idget的子类,也就是UISprit,UILabel等,在 OnFill() 函数里算出所需的Geometry缓存(顶点数, UV , Color ,法线,切线 )。PS:之所以要生成这些数据,是为了之后生成mesh来渲染 而 UIP anel,通过遍历自己子类下所有的 UIW idget组件(已经按深度排序),先创建一个 UID rawCall,然后把该Widget的material,texture,shader对象以及Geometry的缓存传给UIDrawCall,如此反复循环搜索该UIPanel下的每一个Widget,只要是material,texture,shader都和上一个 Widget 一样的 Widget,他们的缓存都传给同一个 UID rawCall,直到循环结束或者碰到一个材质球,贴图,shader对象任一不相同的Widget。当遇到这种 W idget,循环会再创建一个新的 UID rawCall,然后传递material,texture,shader,缓存,如此这般,直到循环完全结束。 每次有新的 UID rawCall产生,UIPanel就会调用上一个 UID rawCall的UpdateGeometry()函数,来创建渲染所需的对象

NGUI之Toggle实现单选框

和自甴很熟 提交于 2020-02-02 05:07:23
一:使用步骤——创建一个 checkboxes   1.首先在UI Root下建立一个Sprite,设置一张贴图,当作按钮的背景。      然后为其添加碰撞组件和Toggle组件      2.为第一个Sprite建立一个子Sprite,设置一张图片,当作选中的标识。      将其调整到适当的位置。      3.选择第一个Sprite的UIToggle组件      为State Transition中的Sprite设置对象,即刚才添加的子Sprite。 以上便创建了一个 checkboxes。 二:创建一个 radio button groups   1.将上面创建的 checkboxes 复制3个。   2.将他们三个的UIToggle中的Group属性,都改为同一个数字,但不能是0。   注意:UIToggle中的Starting State如果勾选的话初始状态则为选择状态。    单选功能是实现了,但是选择其中一个toggle后无法取消选择(比如点击第一次就是选择状态再点一次就是取消选择),不知道是不是我的使用方法不正确~在网上找了也没找到NGUI自带的实现方法,然后就自己写了 代码如下: 1 using UnityEngine; 2 using System.Collections; 3 4 public class toggle : MonoBehaviour 5

NGUI简单背包系统的实现

笑着哭i 提交于 2020-01-23 17:25:16
  一、利用txt文件存储游戏物品信息    首先在asset下创建一个txt文件,这里我们命名为objectsInfoList.txt,并将其拖放到unity Project视图中。   其中txt中我们先存放一些物品信息,每行存储一种物品信息,分别为编号、名称、物品对应的图片名、种类、回血值、回蓝值、出售价和购买价。   其中物品图片要先用NGUI做成图集,种类中的Drug为药品类,以后在代码中我们会定义一个枚举用于存储物品种类。      接下来我们创建一个空物体叫做GameSetting,上面挂一个脚本ObjectsInfo,我们把txt文件读取到一个string中,根据'\n'及','分割字符串,取得对应的物品信息,然后存储到Dictionary中,以后需要物品信息时便可以从dictionary中取出来了。   代码如下,就不做具体解释了。。。虽然注释少点,但还是挺简单的 1 using UnityEngine; 2 using System.Collections; 3 using System.Collections.Generic; 4 5 public class ObjectsInfo : MonoBehaviour 6 { 7 8 public static ObjectsInfo _instance; 9 public TextAsset

EasyTouch和NGUI的使用心得

喜你入骨 提交于 2020-01-22 15:05:11
  今天来写一写Unity3D中两个比较常用插件:EasyTouch和NGUI的学习心得。我用的版本分别是EasyTouch 3.1.1和NGUI 3.6.0,下面也是对这两个版本的学习心得。    1. EasyTouch   EasyTouch是为触摸屏准备的插件,提供了触摸屏的虚拟按键,大致包括3部分:摇杆、按钮和触摸响应。   1.1 EasyTouch摇杆   这个摇杆就是通过手指在摇杆区域的滑动控制你想控制的物体上下左右移动的,当手指触摸到摇杆上面进行移动时,可以通过MovingJoystick类的变量获取移动灵敏度。当然,使用教程网上也有很多,这里不详细讲了,只是简单进行主要流程说明。在使用时,首先要添加一个事件相应函数:EasyJoystick.On_JoystickMove += OnJoystickMove; 其中OnJoystickMove是函数名,需要自己实现这个函数,这个函数的原型需要是: void OnJoystickMove(MovingJoystick move) ,其中接收一个MovingJoystick的变量,可以通过move.joystickAxis.x和move.joystickAxis.y获取左右和前后的移动距离,这里的x对应Unity3D中的x轴(左右移动方向),y对象Unity3D中的z轴(前进后退方向),这样就可以控制物体移动了

【Unity插件】NGUI核心组件之UIPanel .

纵然是瞬间 提交于 2020-01-22 15:03:46
转自: http://blog.csdn.net/daiguangda/article/details/7840084 UIPanel负责创建实际的集合图形。你不需要手动的添加UIPanel-一旦你创建一个控件,它会自动被添加。如果你想将你的UI渲染拆分到不同的Draw Call中,你可以手动创建你自己的UIPanel,例如你要创建一个分屏的游戏,每个屏用一个摄像机进行渲染,这种秦光下你就需要2个UIPanel来避免控件互相重叠。 参数 Panel Tool 决定这一个Panel是否会显示在Panel Tool中。那些动态创建的临时Panel可以将这个选项关掉,比如那些HUD血条,滚动战斗文字等。 Normals 标志让你选择UI的几何图形是否会受到法线和切线的影响。如果你的UI会受光照影响,那么这个选项需要被选上。 Depth Pass 让你添加一个额外的之渲染深度的Draw Call。打开这个选项可以节省部分填充率,因为在你的不透明的控件后面的物体都不会再被渲染。 ----------------- Widgets 告诉你这个Panel渲染了多少个控件 Draw Calls 告诉你这个Panel会消耗多少个Draw Call。这个数值越低,效率越高 Debug Info 让你选择显示哪种调试信息 Clipping 让你选择是否需要裁切功能。默认情况下不会有裁切

NGUI的UICamera

我们两清 提交于 2020-01-22 15:00:47
参考 https://blog.csdn.net/kakashi8841/article/details/20548429 全文请查看: http://note.youdao.com/noteshare?id=a0eead01036d4b20c44908e19928fa30 1. UICamera脚本需要挂接在所有的和UI有关的摄像机上,这样才能够有通知事件。 2. UICamera脚本实际做的事是发送NGUI事件给所有被它所附加的摄像机所看见的对象。除此之外,它不对UI做任何事情了。 3. 你能在场景里拥有多个UICamera脚本。大多游戏会有一个camera绘制挂件,另一个camera绘制游戏对象。 4. EventType 基于深度还是基于与摄像机的距离来排序事件 UICamera的第一个选项,Event Type决定了脚本怎样排列它下面鼠标和触摸事件的顺序。如果设置为UI模式,那么它将一直基于挂件的depth--就和绘制顺序一样。改变选项为World模式,只有在你添加UICamera到你的MainCamera上面的时候才应该这么做。这样做将通过点击到的对象到摄像机的距离排序。 5. Debug选项能用于调试当前鼠标下面是什么。如果当你点击一些按钮的时候,你不知道当前和鼠标事件交互的是什么对象,只要打开这个选项,你就能在顶部看到它。 6. EventMask定义了一些层级

Unity3D学习交流(四)(萌新入)-用UGUI和DOTween制作UI动画

最后都变了- 提交于 2020-01-17 01:36:42
1. 之前在跟视频学习做一个游戏的开始界面UI时,因为视频里用的 NGUI ,它自带Tween可以直接实现UI界面之间的动画切换;而我用的 UGUI ,因为是原生的,效果还行也懒得安装插件了,机缘巧合下载安装了 DOTween ,学习后发现DOTween很强大很好用; 比如在切换界面时,可以用transform.DOScale,transform.DoMove等; 我为了方便,类似NGUI上面的Tween这种,用DOTween写了两个脚本 (1).DOScale.cs using System . Collections ; using System . Collections . Generic ; using UnityEngine ; using DG . Tweening ; public class DoScale : MonoBehaviour { public Vector3 From = new Vector3 ( 0 , 0 , 0 ) ; public Vector3 To = new Vector3 ( 0 , 0 , 0 ) ; public float Duration = 0.3f ; //持续时间 public void DoScaleTo ( ) { transform . localScale = From ; transform .

NGUI Clip Animation (UI动画)

青春壹個敷衍的年華 提交于 2020-01-06 04:56:50
效果预览 视频: http://pan.baidu.com/s/1ntr3XSt 运行环境 Unity 4.5, NGUI3.5, iTween 场景搭建 创建一个UIPanel,UIPanel下再创建一个UISprite,UIPanel选择SoftClip,然后给Panel绑定上PanelController.cs,拷贝4份。结构如下图 MaskManager 给UIRoot绑定PanelController.cs,Targets绑定上面创建的四个Panel,点击Play ,按数字键 0,1,2,3,4 切换效果 MaskManager代码 using UnityEngine; using System.Collections; using System.Collections.Generic; public class MaskManager : MonoBehaviour { public GameObject[] Targets; private List<PanelController> clipList; private float sw = 1024f; private float sh = 576f; // Use this for initialization void Start () { clipList = new List<PanelController>

How to change Font type in Unity?

淺唱寂寞╮ 提交于 2020-01-05 18:53:09
问题 How do I program it so that I can change the font type to: Coalition or Arial... Here is my current code... using UnityEngine; using System.Collections; public class InvSlotHandler : MonoBehaviour { private int excess = 1; UILabel lbl; void Start() { GameObject label = new GameObject(); lbl = label.AddComponent<UILabel>(); label.transform.name = "#QTY"; lbl.fontStyle = FontStyle.Normal; lbl.fontSize = 15; lbl.alignment = NGUIText.Alignment.Right; NGUITools.AddChild (gameObject.transform

Unity. Function call after a certain period of time

耗尽温柔 提交于 2019-12-19 19:41:09
问题 How can I make an object invisible (or just delete) after a certain period of time? Use NGUI. My example (for changes): public class scriptFlashingPressStart : MonoBehaviour { public GameObject off_Logo; public float dead_logo = 1.5f; void OffLogo() { off_Logo.SetActive(false); } //function onclick button //remove item after a certain time after pressing ??? void press_start() { InvokeRepeating("OffLogo", dead_logo , ...); } } 回答1: Use Invoke rather than InvokeRepeating. check Invoke function