本文链接地址: 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. }

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

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

    思路: 导入: 1,初始化一个OpenFileDialog类 (OpenFileDialog fileDialog = new OpenFileDialog();) 2, 获取用户选择文件的后缀名(s ...

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

    这里,通过一个小demo,就可以掌握在布局容器中动态添加控件,以动态添加Button控件为例,添加其他控件同样道理. 1.addView 添加控件到布局容器 2.removeView 在布局容器中删掉 ...

  3. VC中动态添加控件

    VC中动态添加控件 动态控件是指在需要时由Create()创建的控件,这与预先在对话框中放置的控件是不同的. 一.创建动态控件: 为了对照,我们先来看一下静态控件的创建. 放置静态控件时必须先建立一个 ...

  4. jQuery EasyUI动态添加控件或者ajax加载页面后不能自动渲染问题的解决方法

    博客分类: jquery-easyui jQueryAjax框架HTML  现象: AJAX返回的html无法做到自动渲染为EasyUI的样式.比如:class="easyui-layout ...

  5. asp.net动态添加控件学习

    看了老师的教程后,自己一点感悟记录下来: 1.在页面提交后,动态生成的控件会丢失, 但如果生成控件的代码在pageload中,就可以,原理是每次生成页面都执行生成. 2.动态按件或页面原来控件, 在页 ...

  6. WPF:理解ContentControl——动态添加控件和查找控件

    WPF:理解ContentControl--动态添加控件和查找控件 我认为WPF的核心改变之一就是控件模型发生了重要的变化,大的方面说,现在窗口中的控件(大部分)都没有独立的Hwnd了.而且控件可以通 ...

  7. 怎样在不对控件类型进行硬编码的情况下在 C#vs 中动态添加控件

    文章ID: 815780 最近更新: 2004-1-12 这篇文章中的信息适用于: Microsoft Visual C# .NET 2003 标准版 Microsoft Visual C# .NET ...

  8. JQuery动态添加控件并取值

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

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

    原文:WPF 动态添加控件以及样式字典的引用(Style introduction) 我们想要达到的结果是,绑定多个Checkbox然后我们还可以获取它是否被选中,其实很简单,我们只要找到那几个关键的 ...

随机推荐

  1. iOS数据持久化-OC

    沙盒详解 1.IOS沙盒机制 IOS应用程序只能在为该改程序创建的文件系统中读取文件,不可以去其它地方访问,此区域被成为沙盒,所以所有的非代码文件都要保存在此,例如图像,图标,声音,映像,属性列表,文 ...

  2. Autoprefixer处理CSS3属性前缀

    http://www.w3cplus.com/css3/autoprefixer-css-vender-prefixes.html

  3. Python核心编程(切片索引的更多内容)

    # coding=utf8 s = 'abcde' i = -1 for i in range(-1, -len(s), -1): print(s[:i]) # 结果 ''' abcd abc ab ...

  4. log4qt的使用

    Log4Qt替换成新版本使其支持Qt5:https://github.com/devbean/log4qt/tree/master/src/log4qt 1. 解压log4qt到目标文件夹,如D:\Q ...

  5. 深入学习golang(5)—接口

    接口 概述 如果说goroutine和channel是Go并发的两大基石,那么接口是Go语言编程中数据类型的关键.在Go语言的实际编程中,几乎所有的数据结构都围绕接口展开,接口是Go语言中所有数据结构 ...

  6. 黄页js-sdk开发总结分享

    2014年,为了方便第三方开发者能够调用本地的一些功能,我们提供了一套js-sdk.通过调用我们的接口,开发者可以定制UI,获取当前的手机状态,调用支付,黄页扫一扫功能,为用户提供更加优质的体验.下面 ...

  7. mysql性能瓶颈分析、性能指标、指标搜集方法与性能分析调优工具

    本文主要讲解mysql的性能瓶颈分析.性能指标.性能指标信息的搜集工具与方法.分析调优工具的使用. 文章尚未完成. 性能瓶颈: 慢.写速度比读速度慢很多  主要的性能指标: 访问频度, 并发连接量, ...

  8. windows 应用商店应用笔记

    xaml http://www.cnblogs.com/free722/archive/2011/11/06/2238073.html win8 http://blog.csdn.net/ygzk12 ...

  9. Swift:如何判断一个对象是否是某个类(或其子类)的实例

    在OC中我们直接可以用如下方法即可 [obj  isKindOfClass:[obj class]]; 在Swift中,并没有 .class 属性或者方法, 便可以用如下方法 class Person ...

  10. 十分钟理解Gradle

    一.什么是Gradle 简单的说,Gradle是一个构建工具,它是用来帮助我们构建app的,构建包括编译.打包等过程.我们可以为Gradle指定构建规则,然后它就会根据我们的“命令”自动为我们构建ap ...