NGUI学习笔记(一):官方视频学习记录
学习NGUI一直断断续续的,目前打算做一个总结的笔记。
我使用的是比较老的3.6.0版本。
1.使用NGUI,需要开启“Edit”->“Project Settings”->“Physics”里的“Raycasts Hit Tiggers”选项,否则无法使用交互系统,当前该选项是默认开启的。
2.NGUI控件要添加 Box Collider 组件才可以接受交互事件;
3.如果要让按钮上的文本也可以根据按钮的状态改变颜色,可以再在按钮上添加另一个Button组件,然后把组件的Target设置为文本即可;
4.如果需要使用到更多的交互事件,比如移入移出等,可以添加UIEventTrigger脚本;
5.手动使用代码添加UIEventTrigger的事件的示例:
using UnityEngine;
using System.Collections; public class AddEvent : MonoBehaviour
{
private GameObject button; //传递的参数
public float num = 123.456f; void Start ()
{
button = GameObject.Find("UI Root/Sprite"); //获取组件
UIEventTrigger et = button.GetComponent<UIEventTrigger>(); //直接传入方法进行回调
EventDelegate ed1 = new EventDelegate(OnButtonHoverOver1);
et.onHoverOver.Add(ed1); //如果方法带有参数必须使用字符串的形式进行设置
EventDelegate ed2 = new EventDelegate(this, "OnButtonHoverOver2");
ed2.parameters[] = new EventDelegate.Parameter(this, "num");
et.onHoverOver.Add(ed2);
} private void OnButtonHoverOver1()
{
Debug.Log("OnButtonHoverOver1");
} private void OnButtonHoverOver2(float p)
{
Debug.Log("OnButtonHoverOver2 p:" + p.ToString());
}
}
其它的事件如Button的onClick等方法都是一致的。
6.如果控件无法接收到事件,需要注意一下控件的Depth的设置,高的Depth会阻断到低的Depth。对于这种情况可以开启NGUI的Debug模式,这样可以查看到接收鼠标事件的对象。
7.ScrollView的使用记录:
- 对于ScrollView控件,我们可以添加多个控件到其内部,为其内部的控件添加BoxCollider和UIDragScrollView脚本,可以通过拖拽内部对象来滚动。
- 如果希望通过一个区域而不是具体的显示组件来拖拽,可以添加一个Invisible Widget,注意不要作为ScrollView的子项添加,拖拽使其尺寸和ScrollView一致,为其添加BoxCollider和UIDragScrollView脚本,UIDragScrollView脚本可以设定其控制的ScrollView对象,这样就可以通过一个区域来拖动ScrollView了。
- 如果希望场景中的对象也可以接收事件,可以为Main Camera添加UICamera脚本。我们为场景中需要监听事件的对象添加脚本即可。
8.将ScrollView中的组件拖出的实现:
- 为内部对象添加DragDropItem脚本,对象可以拖动但是仍然在ScrollView中。
- 添加一个Depth更高的Panel,为其添加DragDropRoot脚本,这样当ScrollView中的对象被拖出时就会被添加到这个Panel中。但是当鼠标释放后我们拖拽的对象仍然会返回到ScrollView中,同时会停留在拖拽的位置。
- 为ScrollView添加一个Grid并将ScrollView的所有子项都移动到Grid中,这样可以实现自动排序的功能,可以勾选Smooth Tween来实现缓动。
- 目前拖出的物体会返回到末端,我们可以选择Sorting为Horizontal来使物体会排列到最接近的位置。
- 创建一个Horizontal Scroll Bar,选中Scroll View,找到UIScroll View组件里的Scroll Bars,将添加的水平滚动条赋值到Horizontal属性即可将两个对象进行关联。
- 我们这时候会发现水平拖动Scroll View中的Sprite不是滚动Scroll View了而是直接拖拽,解决这个问题只需要全选Sprite,选择UIDrag Drop Item里的Restriction为Vertical即可,表示拖拽只支持垂直方向。
- 下面我们看看如何将Scroll View中的一个对象拖拽到指定的地方,我们创建一个Sprite并为其添加一个Box Collider,这就是我们要拖拽到的目的地。然后为其添加一个DragAndDropContainer脚本。
- 对于DragAndDropContainer脚本有一个Reparent Target属性,我们可以创建一个Grid并赋值给它,这样我们拖拽出来的对象都会添加到该Grid中。
NGUI学习笔记(一):官方视频学习记录的更多相关文章
- Angular 快速学习笔记(1) -- 官方示例要点
创建组件 ng generate component heroes {{ hero.name }} {{}}语法绑定数据 管道pipe 格式化数据 <h2>{{ hero.name | u ...
- Vue学习笔记-Vue.js-2.X 学习(六)===>脚手架Vue-CLI(项目说明-Babel)
五 Vue学习-vue-cli脚手架学习(创建只选一个选项:Babel) 1. 项目目录说明 node_modules : 包管理文件夹 public : 静态资源 src : 源代码 gitign ...
- Vue学习笔记-Vue.js-2.X 学习(一)===>基本知识学习
一 使用环境: windows 7 64位操作系统 二 IDE:VSCode/PyCharm 三 Vue.js官网: https://cn.vuejs.org/ 四 下载安装引用 方式1:直接 ...
- [原创]java WEB学习笔记75:Struts2 学习之路-- 总结 和 目录
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- [原创]java WEB学习笔记66:Struts2 学习之路--Struts的CRUD操作( 查看 / 删除/ 添加) 使用 paramsPrepareParamsStack 重构代码 ,PrepareInterceptor拦截器,paramsPrepareParamsStack 拦截器栈
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- 【神经网络与深度学习】学习笔记:AlexNet&Imagenet学习笔记
学习笔记:AlexNet&Imagenet学习笔记 ImageNet(http://www.image-net.org)是李菲菲组的图像库,和WordNet 可以结合使用 (毕业于Caltec ...
- Vue学习笔记-Vue.js-2.X 学习(五)===>脚手架Vue-CLI(PyCharm)
Vue项目在pycharm中配置 退出运行: ctrl+c Vue学习笔记-Vue.js-2.X 学习(六)===>脚手架Vue-CLI(项目说明)
- Vue学习笔记-Vue.js-2.X 学习(四)===>脚手架Vue-CLI(基本工作和创建)
(五) 脚手架Vue-CLI 一 Vue-CLI前提(nodejs和webpack) 二 Vue学习-nodejs按装配置,Node.js 就是运行在服务端的 JavaScript. 1. 去nod ...
- Vue学习笔记-Vue.js-2.X 学习(三)===>组件化高级
(四) 组件化高级 1.插槽(slot)的基本使用 A:基本使用: <slot></slot> B:默认置:<slot><h1>中间可以放默认值< ...
- Vue学习笔记-Vue.js-2.X 学习(二)===>组件化开发
===重点重点开始 ========================== (三) 组件化开发 1.创建组件构造器: Vue.extends() 2.注册组件: Vue.component() 3.使用 ...
随机推荐
- NSString的常用方法
创建一个新字符串并将其设置为 path 指定的文件的内容,使用字符编码enc,在error上返回错误 + (id)stringWithContentsOfURL:(NSURL *)url encodi ...
- Qt4.6.2已编译二进制版本在VS2005中的问题
结论1:如果你想把Qt4.6.2安装在VS2005中,又不想花时间编译,请下载和安装qt-win-opensource-4.6.2-vs2008,并单独编译“QT安装路径/src/winmain/” ...
- the service mysql56 was not found in the Windows services的解决办法
mysql无法启动,无法改变状态-CSDN论坛-CSDN.NET-中国最大的IT技术社区 http://bbs.csdn.net/topics/390943788 具体描述: 关闭,重启mysql ...
- Stop-The-World
Stop-The-World –Java中一种全局暂停的现象 –全局停顿,所有Java代码停止,native代码可以执行,但不能和JVM交互 –多半由于GC引起 •Dump线程 •死锁检查 •堆Dum ...
- Google Code Style
Google开源项目的代码遵循的规范,见这,C++, OC. PS: vim的配色编辑用户主目录下的.vimrc即可.
- (从终端看linux-1)linux tty pty pts 概念 区别
基本概念: 1> tty(终端设备的统称):tty一词源于Teletypes,或者teletypewriters,原来指的是电传打字机,是通过串行线用打印机键盘通过阅读和发送信息的东西,后来这东 ...
- 理解 PHP 中的 Streams
Streams 是PHP提供的一个强有力的工具,我们常常在不经意会使用到它,如果善加利用将大大提高PHP的生产力. 驾驭Streams的强大力量后,应用程序将提升到一个新的高度. 下面是PHP手册中对 ...
- 详解js中的寄生组合式继承
寄生组合式继承是js中最理想的继承方式, 最大限度的节省了内存空间. js中的寄生组合式继承要求是: 1.子对象有父对象属性的副本, 且这些不应该保存在子对象的prototype上. 2. ...
- (转载) ExtJs大比拼JQuery:Dom文档操作
此次不生产水,做一次搬运工. http://www.cnblogs.com/lipan/archive/2011/12/07/2269815.html
- Arch 常用工具
一.网络浏览 pacman -S firefox firefox-i18n注:该命令中的前者为 Firefox 主程序,后者为语言包.pacman -S opera 二.图像编辑 pacman -S ...