NGUI 动态添加控件
本文链接地址: Unity3D NGUI动态创建按钮
本例仅以熟悉NGUI组件功能为目的,想快捷简便的创建按钮或其它游戏物体请参考 “Unity3D 动态实例化Prefab”
以动态创建服务器列表为例。
- public UIAtlas mAtlas;
- public UIFont mFont;
- public string mSriteName;
- public GameObject Playerlist;
- /// <summary>
- /// 动态加载一个NGUI按钮
- /// </summary>
- /// <param name="name"></param>
- private void CreateServerButton(string key,string name, int index)
- {
- //获得深度(要创建button的Panle的深度)
- int depth = NGUITools.CalculateNextDepth(PanleMe);
- //创建button物体,命名、设tag、摆所在panle的相对位置。
- GameObject go = NGUITools.AddChild(PanleMe);
- go.name = name;
- go.tag = "trendsButton";
- go.transform.localPosition = new Vector3(-180 + (index % 3) * 180, 140, 0);
- //添加button的背景图片UISprite
- UISprite bg = NGUITools.AddWidget<UISprite>(go);
- bg.type = UISprite.Type.Sliced;
- bg.name = "Background";
- bg.depth = depth;
- //背景图片使用的图集
- bg.atlas = mAtlas;
- //图集中使用的精灵名字
- bg.spriteName = mSriteName;
- bg.transform.localScale = new Vector3(150f, 40f, 1f);
- //跳转位置(必要)
- bg.MakePixelPerfect();
- //如果有字体,添加UILabel
- if (mFont != null)
- {
- UILabel lbl = NGUITools.AddWidget<UILabel>(go);
- lbl.font = mFont;
- lbl.text = name;
- lbl.transform.localScale = new Vector3(22f, 22f, 1f);
- lbl.transform.localPosition = new Vector3(0, 0, -1f);
- lbl.color = Color.black;
- lbl.MakePixelPerfect();
- }
- //添加碰撞(有碰撞才能接收鼠标/触摸),大小与Button背景一致
- BoxCollider box = NGUITools.AddWidgetCollider(go);
- box.center = new Vector3(0,0,-1);
- box.size = new Vector3(bg.transform.localScale.x, bg.transform.localScale.y, 0);
- //添加UIButton触发事件的必要组件,并关联之前生成的UISprite
- go.AddComponent<UIButton>().tweenTarget = bg.gameObject;
- //添加动态效果组件(大小、位移、音效)。(可选)
- go.AddComponent<UIButtonScale>();
- go.AddComponent<UIButtonOffset>();
- go.AddComponent<UIButtonSound>();
- /*------ 一下是自己要用到的UIButton功能,可以绑自己需要的组件 ------*/
- //添加一个开启Player list Panel 的按钮事件
- UIButtonTween serverListPanel = go.AddComponent<UIButtonTween>();
- serverListPanel.tweenTarget = PanleNext;
- serverListPanel.playDirection = AnimationOrTween.Direction.Forward;
- serverListPanel.ifDisabledOnPlay = AnimationOrTween.EnableCondition.EnableThenPlay;
- //隐藏自己panel
- UIButtonTween hidemePanel = go.AddComponent<UIButtonTween>();
- hidemePanel.tweenTarget = PanleMe;
- hidemePanel.playDirection = AnimationOrTween.Direction.Reverse;
- hidemePanel.disableWhenFinished = AnimationOrTween.DisableCondition.DisableAfterReverse;
- //添加点击事件,参数是服务器ID(点击获取本服务器ID的下所有角色)
- UIButtonMessage ubm = go.AddComponent<UIButtonMessage>();
- ubm.target = Playerlist;
- //给UIButtonMessage子增加传递‘参数’功能。
- ubm.functionName = "Playerlist";
- ubm.parameterStr = key;
- }
- /// <summary>
- /// 清空动态生成的按钮
- /// </summary>
- void cleantrendsButton()
- {
- GameObject[] tbs = GameObject.FindGameObjectsWithTag("trendsButton");
- for (int i = 0; i < tbs.Length; i++)
- {
- Destroy(tbs[i].gameObject);
- }
- }
NGUI 动态添加控件的更多相关文章
- winform导入导出excel,后台动态添加控件
思路: 导入: 1,初始化一个OpenFileDialog类 (OpenFileDialog fileDialog = new OpenFileDialog();) 2, 获取用户选择文件的后缀名(s ...
- Android 在布局容器中动态添加控件
这里,通过一个小demo,就可以掌握在布局容器中动态添加控件,以动态添加Button控件为例,添加其他控件同样道理. 1.addView 添加控件到布局容器 2.removeView 在布局容器中删掉 ...
- VC中动态添加控件
VC中动态添加控件 动态控件是指在需要时由Create()创建的控件,这与预先在对话框中放置的控件是不同的. 一.创建动态控件: 为了对照,我们先来看一下静态控件的创建. 放置静态控件时必须先建立一个 ...
- jQuery EasyUI动态添加控件或者ajax加载页面后不能自动渲染问题的解决方法
博客分类: jquery-easyui jQueryAjax框架HTML 现象: AJAX返回的html无法做到自动渲染为EasyUI的样式.比如:class="easyui-layout ...
- asp.net动态添加控件学习
看了老师的教程后,自己一点感悟记录下来: 1.在页面提交后,动态生成的控件会丢失, 但如果生成控件的代码在pageload中,就可以,原理是每次生成页面都执行生成. 2.动态按件或页面原来控件, 在页 ...
- WPF:理解ContentControl——动态添加控件和查找控件
WPF:理解ContentControl--动态添加控件和查找控件 我认为WPF的核心改变之一就是控件模型发生了重要的变化,大的方面说,现在窗口中的控件(大部分)都没有独立的Hwnd了.而且控件可以通 ...
- 怎样在不对控件类型进行硬编码的情况下在 C#vs 中动态添加控件
文章ID: 815780 最近更新: 2004-1-12 这篇文章中的信息适用于: Microsoft Visual C# .NET 2003 标准版 Microsoft Visual C# .NET ...
- JQuery动态添加控件并取值
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- WPF 动态添加控件以及样式字典的引用(Style introduction)
原文:WPF 动态添加控件以及样式字典的引用(Style introduction) 我们想要达到的结果是,绑定多个Checkbox然后我们还可以获取它是否被选中,其实很简单,我们只要找到那几个关键的 ...
随机推荐
- 从range和xrange的性能对比到yield关键字(中)
上节提出了range和xrange的效率问题,这节我们来探究其中的原因 yield的使用 我们看下面的程序: #coding: utf-8 def test(): print 4 print ...
- Java中Atomic包的实现原理及应用
1. 同步问题的提出 假设我们使用一个双核处理器执行A和B两个线程,核1执行A线程,而核2执行B线程,这两个线程现在都要对名为obj的对象的成员变量i进行加1操作,假设i的初始值为0,理论上两个线程运 ...
- 在jsp中重复定义了两个相同id的标签导致的错误
jQuery做前台开发的程序有一个页面在IE11和谷歌浏览器下都没有问题,但是在XP的IE8下运行就报错: 后来发现是定义了两个相同id的标签所致. 在icCard.jsp中定义的标签: 在carIn ...
- STL的string和wstring
STL有字符串处理类——stirng和wstring,但是用的时候会觉得不是很方便,因为它不能像TCHAR一样根据定义的宏在char类型字符串和wchar_t进行转换,总不能因为程序要Unicode就 ...
- Android文本输入框(EditText)切换密码的显示与隐藏
package cc.c; import android.app.Activity; import android.os.Bundle; import android.text.Selection; ...
- Linux内核同步方法
1.原子操作,是其它同步方法的基础. 2.自旋锁,线程试图获取一个已经被别人持有的自旋锁,当前线程处于忙等待,占用cpu资源. 3.读写自旋锁,根据通用性和针对性的特点,普通自旋锁在特定场景下的表现会 ...
- WinDbg使用介绍
Windbg工作空间 WinDbg使用工作空间来描述和存储调试项目的属性.参数及调试器设置等信息.工作空间与vc中的项目文件很相似.WinDbg定义了两种工作空间,一种为默认工作空间,另一种为命名的工 ...
- 火狐 SSL 收到了一个弱临时 Diffie-Hellman 密钥的解决办法
连接 https网址 时发生错误. 在服务器密钥交换握手信息中 SSL 收到了一个弱临时 Diffie-Hellman 密钥. (错误码: ssl_error_weak_server_ephemera ...
- img标签中的图片加载异常时显示默认的图片
备忘:
- CSS3学习笔记--transform基于原始数据(旋转木马实例)
参考链接:好吧,CSS3 3D transform变换,不过如此! transform-style:preserve-3d属性要在图片所在的容器(父元素)中定义,perspective定义在父子元素上 ...