1、DrawCall:在Unity中,每次引擎准备数据并通知GPU的过程称为一次Draw Call。Draw Call值越低,会得到更好的渲染性能。
Draw Call Tool:NGUI--》Open--》Draw Call Tool,可以查看DrawCall的一些信息。
影响DrawCall的因素:
Atlas数量
Font动态字体数量
渲染顺序:取决于Sprite Depth深度,Unity 默认会按照控件的 Depth 来渲染。从后往前渲染,当使用相同材质的控件会合并为一个 Draw Call 。如果和前一个材质不相同则会重新产生一个 Draw Call
Panel数量
2、UI Root:
如果是Create的2D UI.会自动生成一个UI Root和其子层下生成一个Camera。
UI Root游戏物体总是放在NGUI UI层级的最上层;
UI Root游戏物体包括Transform组件+UIRoot脚本组件+UIPanel脚本组件+Rigidbody组件
UIRoot脚本组件提供根据屏幕高度的反比来缩放UI界面的一些参数。
3、Camera:
如果是Create的2D UI.会自动生成一个UI Root和一个Camera。
2d UI是用正交相机来投射加入NGUI定制相机使得投射范围在一个方形可视范围内,在z轴的视觉表现上被忽略。
Camera Tool:此工具可以查看当前场景中所有的相机,包括Main Camera和UI相机。
4、Altas图集:
Atlas是一个容器,他包含了许多Sprite的坐标信息。与使用很多小的贴图来渲染UI相比,使用一张包含了所有小贴图的大贴图的效率要高许多。这些小的贴图就被叫做Sprite,这个大的贴图就被叫做Atlas。
Altas Maker:NGUI提供了此工具来创建一个Altas图集。
5、Font字体:
Font Maker:用于观察现有的Font字体,或者制作静态Font(Bitmap字体),动态Font。
静态Font一般是从美工处获取的图片文字,需要转换才能在NGUI里面使用。静态Font必须要属于某一个Atlas。
NGUI提示,动态字体,不能被做成Atlas的一部分,使用动态字体至少会增加一次DrawCall。
6、NGUI提供的控件:
Prefab Toolbar:此工具下提供了很多常用的控件,可以直接使用。
组件:UI组件基本上是以UI开头的脚本组件,如UISprite、UILable、UIWidget等。
控件:我是这么理解的,由一个空的GameObject+一个或多个组件,就可以组成一个控件,比如:
Button:Transform+UISprite(Script)+UIButton(Script)+Box Collider+UIPlay Sound
Sprite:Transform+UISprite(Script)//所以说Sprite是一个控件,UISprite是一个组件
7、Panel控件以及UIPanel组件:
UIPanel负责创建实际的集合图形。你不需要手动的添加UIPanel-一旦你创建一个控件,它会自动被添加。如果你想将你的UI渲染拆分到不同的DrawCall中,你可以手动创建你自己的UIPanel,例如你要创建一个分屏的游戏,每个屏用一个摄像机进行渲染,这种秦光下你就需要2个UIPanel来避免控件互相重叠。
Panel Tool:查看当前场景中NGUI创建的所有Panel及其信息。
8、Widget(Container)控件以及UIWidget组件:
其他组件的容器。
Widget Tool(Widget Wizard):控件创建向导,可以向UI的游戏物体上(如UI Root)添加各种控件。
9、NGUI事件机制:
NGUI的事件触发都必须添加Box Collider,并勾选Is Trigger,在Inspector窗口设置Box大小尺寸,可以在Widget的Collider勾选auto-adjust to match。还有一个比较重要的参数需要设置正确,即是UI Root下Camera参数,在Inspector窗口中,要确定UICamera中的Event Type选择3D UI,Event Mask选择Everything。
Box Collider:Button本身就带有OnClick事件,但是Sprite,Label等( 也绑有Widget的)并没有触发事件,所以必须手动添加Box Collider。
事件注册方法:
直接将MonoBehaviour的脚本上的方法绑定至Notifiy上面。这种方法不够灵活,不推荐。
在需要接收事件的gameobject上附加Event Listener。添加component->NGUI->Internal->Event Listener。
在任何一个脚本或者类中即可得到按钮的点击事件、把如下代码放在任意类中或者脚本中。
void Awake ()
{
//获取需要监听的按钮对象
GameObject button = GameObject.Find("UI Root (2D)/Camera/Anchor/Panel/LoadUI/MainCommon/Button");
//设置这个按钮的监听,指向本类的ButtonClick方法中。
UIEventListener.Get(button).onClick = ButtonClick;
}
//计算按钮的点击事件
void ButtonClick(GameObject button)
{
Debug.Log("GameObject " + button.name);
}
10、Tween:
NGUI的动画系统,给UI游戏物体添加动画效果。