NGUI的工作总结(二)


一.NDATA与NGUI的结合


NDATA是一个符合.net的mvvm模型的ngui辅助插件,将界面与逻辑完全分割开 

最为方便的是它的自动数据绑定功能,在创建列表式数据的界面和动态的数据是十分有效

目前我用它的这个功能做过两个系统,一个是卡牌的自动数据刷新(双向数据绑定)

还有一个地图生成和地图上元素的自动更新


几个比较关键的组件

NGUIRootContext :这个组件负责把ndata的数据与ngui数据做绑定(绑定的数据格式看官网范例即可,有模板,很方便)


NGUIVisibleBinding:自我感觉最重要的组件,控制NGUI空间的显示隐藏(也包括NGUI按钮的碰撞器开关),不仅支持bool 类型的判断,也支持数值和字符串类型的值控制组件的显示隐藏,善用这个,超级方便,能做好多事情


OnClickBinding:点击按钮后触发,根据path执行你选定的方法,在NGUI3.0之前很方便,当然现在也很方便,因为执行方法的路径一般都是与组件数据在同一个脚本,访问起来非常方便,NGUI3.0自带的反射技术执行方法也不错,而不是以前的sendMessage了


二.NGUI3.0


NGUI升级到3.0以后更新了好多东西


首先最值得庆祝的就是depth终于完全起作用了,而不需要在调整z轴来控制元件的前后关系了,很大的进步啊,记得上个项目的z轴值最后都调到快-800了

然后是它的触发函数的方法变了,以前按钮触发方法是sendMessage或者自己在脚本上添加EventListener,而现在只要拖拽脚本所在object,会动态探测出所有public的方法

新的事件触发脚本,EventDelegate,具体代码还没看

EventDelegate.Add();可以添加一个UI事件,加一个方法,在事件触发时,即可自动执行方法

新的uipanel组件,可以非常准确的告诉你一共有几个DrawCall,并且这些DrawCall是由什么组件造成的,在优化的时候非常方便

创建sprite,label都有快捷键了alt shift+S/L,很方便

调整depth也有了快捷键,受这个启发,在scene视图里面添加了几个按钮,在调整UI的时候很方便

代码如下,放在UISpriteInspector里面的OnSceneGUI

	public override void OnSceneGUI ()
	{

				//UILabel currentLabel = (UILabel)Selection.activeObject;
		
				UISprite currentLabel = (UISprite)target;
				Vector3 position = currentLabel.transform.position;
				Handles.color = Color.red;
				Handles.Label (position+ Vector3.right*0.4f,(currentLabel.name+"Positon IS:"+currentLabel.transform.localPosition.ToString()),new GUIStyle(){fontSize = 20 });
				Handles.BeginGUI ();
				Vector2 ButtonPos = HandleUtility.WorldToGUIPoint (position+ (new  Vector3(0.4f,0.3f)));
				//Vector2 ButtonPos = HandleUtility.WorldToGUIPoint (position);
				GUILayout.BeginArea (new Rect(ButtonPos.x,ButtonPos.y+1,200,200));
		
				if (GUILayout.Button ("ResetPositon.")) {
						if(!EditorApplication.isPlaying)
						{
							Undo.RegisterSceneUndo("BackPos");
						}
			Vector3 temp = currentLabel.transform.position ;
			currentLabel.transform.position = new Vector3 (0f,temp.y,temp.z);
		}
		
				if (GUILayout.Button ("Depth++.")) {
					if(!EditorApplication.isPlaying)
					{
						Undo.RegisterSceneUndo("BackPos");
					}
					currentLabel.depth += 1;
				}
		
				if (GUILayout.Button ("Depth--.")) {
					if(!EditorApplication.isPlaying)
					{
						Undo.RegisterSceneUndo("BackPos");
					}
					currentLabel.depth -= 1;
				}
		
				GUILayout.EndArea ();
		
				Handles.EndGUI ();
		base.OnSceneGUI ();

	}

效果是这样子的


当你选中控件的时候,会子啊右侧出现一个位置信息和三个按钮,第一个是是x轴归零(对位用的),后两个就是让depth加和减用的


三.暂时没有







  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值