NGUI 动态添加控件

本文链接地址: Unity3D NGUI动态创建按钮

本例仅以熟悉NGUI组件功能为目的,想快捷简便的创建按钮或其它游戏物体请参考 “Unity3D 动态实例化Prefab

以动态创建服务器列表为例。

  1. public UIAtlas mAtlas;
  2. public UIFont mFont;
  3. public string mSriteName;
  4. public GameObject Playerlist;
  5. /// <summary>
  6. /// 动态加载一个NGUI按钮
  7. /// </summary>
  8. /// <param name="name"></param>
  9. private void CreateServerButton(string key,string name, int index)
  10. {
  11. //获得深度(要创建button的Panle的深度)
  12. int depth = NGUITools.CalculateNextDepth(PanleMe);
  13. //创建button物体,命名、设tag、摆所在panle的相对位置。
  14. GameObject go = NGUITools.AddChild(PanleMe);
  15. go.name = name;
  16. go.tag = "trendsButton";
  17. go.transform.localPosition = new Vector3(-180 + (index % 3) * 180, 140, 0);
  18. //添加button的背景图片UISprite
  19. UISprite bg = NGUITools.AddWidget<UISprite>(go);
  20. bg.type = UISprite.Type.Sliced;
  21. bg.name = "Background";
  22. bg.depth = depth;
  23. //背景图片使用的图集
  24. bg.atlas = mAtlas;
  25. //图集中使用的精灵名字
  26. bg.spriteName = mSriteName;
  27. bg.transform.localScale = new Vector3(150f, 40f, 1f);
  28. //跳转位置(必要)
  29. bg.MakePixelPerfect();
  30. //如果有字体,添加UILabel
  31. if (mFont != null)
  32. {
  33. UILabel lbl = NGUITools.AddWidget<UILabel>(go);
  34. lbl.font = mFont;
  35. lbl.text = name;
  36. lbl.transform.localScale = new Vector3(22f, 22f, 1f);
  37. lbl.transform.localPosition = new Vector3(0, 0, -1f);
  38. lbl.color = Color.black;
  39. lbl.MakePixelPerfect();
  40. }
  41. //添加碰撞(有碰撞才能接收鼠标/触摸),大小与Button背景一致
  42. BoxCollider box = NGUITools.AddWidgetCollider(go);
  43. box.center = new Vector3(0,0,-1);
  44. box.size = new Vector3(bg.transform.localScale.x, bg.transform.localScale.y, 0);
  45. //添加UIButton触发事件的必要组件,并关联之前生成的UISprite
  46. go.AddComponent<UIButton>().tweenTarget = bg.gameObject;
  47. //添加动态效果组件(大小、位移、音效)。(可选)
  48. go.AddComponent<UIButtonScale>();
  49. go.AddComponent<UIButtonOffset>();
  50. go.AddComponent<UIButtonSound>();
  51. /*------ 一下是自己要用到的UIButton功能,可以绑自己需要的组件 ------*/
  52. //添加一个开启Player list Panel 的按钮事件
  53. UIButtonTween serverListPanel = go.AddComponent<UIButtonTween>();
  54. serverListPanel.tweenTarget = PanleNext;
  55. serverListPanel.playDirection = AnimationOrTween.Direction.Forward;
  56. serverListPanel.ifDisabledOnPlay = AnimationOrTween.EnableCondition.EnableThenPlay;
  57. //隐藏自己panel
  58. UIButtonTween hidemePanel = go.AddComponent<UIButtonTween>();
  59. hidemePanel.tweenTarget = PanleMe;
  60. hidemePanel.playDirection = AnimationOrTween.Direction.Reverse;
  61. hidemePanel.disableWhenFinished = AnimationOrTween.DisableCondition.DisableAfterReverse;
  62. //添加点击事件,参数是服务器ID(点击获取本服务器ID的下所有角色)
  63. UIButtonMessage ubm = go.AddComponent<UIButtonMessage>();
  64. ubm.target = Playerlist;
  65. //给UIButtonMessage子增加传递‘参数’功能。
  66. ubm.functionName = "Playerlist";
  67. ubm.parameterStr = key;
  68. }
  69. /// <summary>
  70. /// 清空动态生成的按钮
  71. /// </summary>
  72. void cleantrendsButton()
  73. {
  74. GameObject[] tbs = GameObject.FindGameObjectsWithTag("trendsButton");
  75. for (int i = 0; i < tbs.Length; i++)
  76. {
  77. Destroy(tbs[i].gameObject);
  78. }
  79. }

时间: 2024-08-28 20:24:04

NGUI 动态添加控件的相关文章

android 在布局中动态添加控件

第一步 Java代码 final LayoutInflater inflater = LayoutInflater.from(this); 第二步:获取需要被添加控件的布局 Java代码 final LinearLayout lin = (LinearLayout) findViewById(R.id.LinearLayout01); 第三步:获取需要添加的布局(控件) Java代码 LinearLayout layout = (LinearLayout) inflater.inflate( R

New UI-Java代码动态添加控件或xml布局

New UI-Java代码动态添加控件或xml布局  --转载请注明出处:coder-pig,欢迎转载,请勿用于商业用途! 小猪Android开发交流群已建立,欢迎大家加入,无论是新手,菜鸟,大神都可以,小猪一个人的 力量毕竟是有限的,写出来的东西肯定会有很多纰漏不足,欢迎大家指出,集思广益,让小猪的博文 更加的详尽,帮到更多的人,O(∩_∩)O谢谢! 小猪Android开发交流群:小猪Android开发交流群群号:421858269 新Android UI实例大全目录:http://blog.

Android 在布局容器中动态添加控件

这里,通过一个小demo,就可以掌握在布局容器中动态添加控件,以动态添加Button控件为例,添加其他控件同样道理. 1.addView 添加控件到布局容器 2.removeView 在布局容器中删掉已有的控件 3.使用,来个小demo就明白了 public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(save

android 动态添加控件并实现每个子控件的点击事件

需求:我们要点击进入一家店铺,根据不同的店铺,显示不同条数的子条目 如:消毒间,洗菜间等...这些都是或多或少的,所以需要动态添加: 首先自定义View(linearLayout): package cn.qust.fang.widget; import io.vov.vitamio.MediaPlayer; import io.vov.vitamio.widget.MediaController; import io.vov.vitamio.widget.VideoView; import a

winform导入导出excel,后台动态添加控件

思路: 导入: 1,初始化一个OpenFileDialog类 (OpenFileDialog fileDialog = new OpenFileDialog();) 2, 获取用户选择文件的后缀名(string extension = Path.GetExtension(fileDialog.FileName).ToLower();),并设置允许后缀文件名: 3,NPOI转datetable,遍历tatetable转成实体类列表并入库: 导出: 1, 创建提示用户保存类,SaveFileDial

C#动态添加控件到窗体不显示

在FormLoad里面添加控件时,用this.Controls.Add()方法向窗体里面动态添加控件,调试,一直不显示,后来发现原来窗体上有一个groupbox覆盖了整个窗体,其实控件已经添加上去了,只是被遮盖了. 后面改为this.groupBox1.Controls.Add(),把控件添加到groupbox里面就不会被遮盖了 1 private void UniqueForm_Load(object sender, EventArgs e) 2 { 3 if (pFlag == 1) 4 {

DevExpress.XtraLayout.LayoutControl 动态添加控件

// Create an item within a specified group,// bound to a specified data field with the specified editorprivate LayoutControlItem CreateItemWithBoundEditor(BaseEdit editor, object dataSource,   string dataMember, LayoutControlGroup parentGroup) {   ed

asp.net动态添加控件学习

看了老师的教程后,自己一点感悟记录下来: 1.在页面提交后,动态生成的控件会丢失, 但如果生成控件的代码在pageload中,就可以,原理是每次生成页面都执行生成. 2.动态按件或页面原来控件, 在页面往返重新生成时, 都有一个特点.就是控件里面的值和状态会保留下来. 如: 在DorpDownList中动态添加了 item项, 在页面往返后, 这个项是保留下来的, 选中值selected也是保留下来的. 在CheckBox中的值,或是动态添加的CheckBox中的值,页面返回后,其中的check

WPF 动态添加控件以及样式字典的引用(Style introduction)

原文:WPF 动态添加控件以及样式字典的引用(Style introduction) 我们想要达到的结果是,绑定多个Checkbox然后我们还可以获取它是否被选中,其实很简单,我们只要找到那几个关键的对象就可以了. 下面是Ui,其中定义了一个WrapPanel来存放CheckBox,还有两个按钮,用于测试相关功能. <Window x:Class="WpfApplication1.MainWindow" xmlns="http://schemas.microsoft.c