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.使用 ...
随机推荐
- nginx负载均衡 - session失效
最近迷上了Nginx,真实麻雀虽小,五脏俱全..功能实在强大.. nginx不单可以作为强大的web服务器,也可以作为一个反向代理服务器,而且nginx还可以按照调度规则实现动态.静态页面的分离,可以 ...
- world符号大全
■特殊符号:·⊙①⊕◎Θ⊙●○¤㊣㈱@の■□★☆◆◇◣◢ ◤◥▲△▼▽⊿◢ ▂ ▃ ▄ ▅ ▆ ▇ █ ▉ ▊▋▌▍▎▏■ ▓ 回 □ 〓≡↑↓→←↘↙♀♂┇┅|$ @ * & # ※ 卍 卐 ...
- Linux下执行程序出现 Text file busy 提示时的处理方式
使用 fuser xxx 命令查看xxx文件被哪个进程占用,然后关闭该进程,解决问题. # fuser xxxxxx: 2878# kill -9 2878 注:xxx是文件 ...
- 什么是WebService
举个例子:现在有5个项目,项目彼此独立,甚至都不是同一类语言进行开发的.这5个项目是:百度知道,百度贴吧,百度新闻,百度视频,百度百科.突然有一天,老板说:把这几个系统揉称一个大项目,起名直接叫做百度 ...
- poj2229
很不错的一道题,这里提供两种方法: 方法1:递推: 易知当n为奇数时,f[n]=f[n-1] (n-1的所有方案前面添1,并且没有新的方案): 重点是n为偶数的时候,则拆分方案中,要么有偶数个1,要么 ...
- 【持续更新】D3 的学习资料
经常有朋友问哪里有关于 D3 的比较好的学习资料,现整理成此文.以后找到更多更好的,会不断更新本文. 我是在2013年开始接触 D3 的,当时就觉得这个工具很好玩.至今,学习资料整理了不少.如果有朋友 ...
- C#百万数据查询超时问题
用c#从百万数据中筛选一些信息时,经常会出现程序连接超时的错误,常见的错误很多,例如:Timeout expired. The timeout period elapsed prior to comp ...
- JVM内存结构之一--总体介绍
Java 虚拟机在执行Java程序的时候会把它管理的内存区域划为几部分,这一节我们就来解析一下Java的内存区域. 有的人把JVM管理的内存简单地分为堆内存和栈内存,这样分未免有些太肤浅了. Java ...
- e2e 自动化集成测试 架构 实例 WebStorm Node.js Mocha WebDriverIO Selenium Step by step (四) Q 反回调
上一篇文章“e2e 自动化集成测试 架构 京东 商品搜索 实例 WebStorm Node.js Mocha WebDriverIO Selenium Step by step (三) SqlServ ...
- [GRYZ2015]足球联赛
问题描述 巴蜀中学新一季的足球联赛开幕了.足球联赛有n 只球队参赛,每赛季,每只球队要与其他球队各赛两场,主客各一场,赢一场得3 分,输一场不得分,平局两只队伍各得一分.英勇无畏的小鸿是机房的主力前锋 ...