NGUI学习笔记(六):ScrollView、Grid和Table

下面我们来看看游戏UI开发中比较核心的开发,我称为列表开发,比如背包和各种形式不一的列表等,下面我们来看几个具体的样例:

 

基本上就是一些重复的制作好的多个UI控件进行排列,同时可以支持滚动,当然,高级一点的话也可能需要支持拖拽操作等。

下面我们来学习一下这些功能该如何使用NGUI实现,最后再给出一个具体的示例。

基础控件

NGUI已经帮助我们设计好了相关的组件,所以我们要实现上面的效果不需要从头开始,只要学会使用NGUI提供的相关的脚本即可,非常简单。

ScrollView

即滚动视口组件,当我们需要对一个或多个对象在一个指定的区域内进行滚动时,可以使用该组件。

我们可以在任意的UI下添加一个ScrollView,添加好的ScrollView我们发现其绑定了2个脚本,分别如下:

UIPanel

UIPanel组件主要是可以实现剪辑移出视口的内容,下面我们看看主要使用到的参数的意思:

Clipping:剪辑类型

  1. None:不剪辑,移出可视区域的图像任然可见。
  2. Texture Mask:可以选择一张贴图作为遮罩。
  3. Soft Clip:柔和剪辑,默认选择该模式,我们一会会集体说它。
  4. Constrain but don`t Clip:约束不能拖拽出视口但是不进行剪辑。

如果选择了Soft Clip则会出现一些可选项,如下:

  1. Offset:视口偏移量。
  2. Center:和Offset效果一致。
  3. Size:视口尺寸。
  4. Softness:剪辑边缘柔和度。

UIScroll View

本脚本用来控制视口滚动功能,我们具体看下核心的属性:

  1. Content Origin:滚动起点,默认为左上角。
  2. Movement:滚动方向:Horizontal水平方向、Vertical垂直方向、Unrestrained自由拖动、Custom自定义方向。
  3. Drag Effect:拖动效果:None无效果、Momentum带惯性的拖动、MomentumAndSpring惯性和弹性的拖动(拖动越界后会自动弹回到正常的位置)。
  4. Scorll Wheel Factor:滚轮因子,值越大滚动越快。
  5. Momentun Amount:惯性因子,值越大滚动时惯性越大。
  6. Restrict Within Panel:拖拽是否被限制在视口内,默认选中即可。
  7. Cancel Drag If Fits:但刚好合适视口时则退出拖拽。
  8. Smooth Drag Start:勾选时拖拽开始会有一种缓冲的感觉,不勾选则开始拖动就是鼠标移动的速度。
  9. IOS Drag Emulation:模拟IOS的拖拽效果,可以增强拖拽体验。
  10. Scroll Bars:滚动条属性允许我们自己设置滚动条,留空则表示不使用滚动条。

我们单独在看看Scroll Bars的Show Condition属性:

  1. Always:总是显示滚动条。
  2. Only If Need:当需要显示时出现。
  3. When Dragging:拖拽时出现。

Grid

下面我们看看Grid组件,当我们需要对多个UI进行排列时就需要用到这个组件了。

一般我们不会直接添加一个Grid对象(因为Grid对象需要依靠父级对象来确定大小,自身是不能设定尺寸的),我们可以先创建一个Invisible Widget组件,再在该对象下创建Grid组件,最后把需要排序的组件拖入该Grid中即可。

当我们需要在编辑界面就将子对象排列好时可以点击设置菜单,如下:

我们来看看Grid提供的属性:

  1. Arrangement:网格排列方向,Horizontal水平排列、Vertical垂直排列、Cell Snap按子项当前的位置对齐子项。
  2. Cell Width:子项格子宽度。
  3. Cell Height:子项格子高度。
  4. Column Limit:子项最大数量。
  5. Sorting:排序方式:None按照Index排序、Alphabetic按照名字进行排序、Horizontal和Vertical按照localPosition进行的排序、Custom自己实现的排序方式。
  6. Pivot:网格起始点锚点。

其它项一般使用默认值即可。

Table

Grid是对子项进行水平或垂直的排序,而Table是对子项进行可换行的排序。

我们来看看Table的属性:

  1. Columns:列数,超过该数目会添加一行。
  2. Direction:行添加方向,Down向下添加、Up向上添加。
  3. Sorting:排序方式:None按照Index排序、Alphabetic按照名字进行排序、Horizontal和Vertical按照localPosition进行的排序、Custom自己实现的排序方式。
  4. Pivot:网格起始点锚点。
  5. Cell Alignment:格子对齐点。
  6. Padding:间隔。

其它项一般使用默认值即可。

简单的列表(Demo1)

这里我们就快速的过一遍,示例工程文件会在本系列的结尾给出。

下面我们基于上面学习的组件实现一个简单的列表:

  1. 我们在UI中创建一个ScrollView并调整其大小,设置滚动方向为垂直;
  2. 在ScrollView中添加一个Grid组件,设置其排序方向为垂直,同时设置其Pivot为Top;
  3. 在Grid组件中添加一个Sprite组件命名为Item,在Sprite组件上添加一些列表和一个按钮;
  4. 通过复制创建多个Item到Grid组件中;

实现滚动效果

给每个Item组件都添加Box Collider和Drag Scroll View组件即可;

添加自定义滚动条

NGUI给我们提供了一些已经制作好的预制件,比如水平和垂直滚动条,我们可以直接使用;

  1. 点击菜单栏“NGUI”->“Open”->“Prefab Toolbar”;
  2. 在打开的窗口中选择“Simple Vertical Scroll Bar”,将其拖拽到场景中摆好位置;
  3. 选中我们之前创建的Scroll View对象,设置其Scroll Bar属性中的Vertical为我们刚创建的滚动条即可进行关联;

运行一下,我们简单的列表就完成了,虽然还没有任何的功能。

时间: 2024-08-16 14:04:39

NGUI学习笔记(六):ScrollView、Grid和Table的相关文章

NGUI 学习笔记之一 ScrollView

一.createScrollView 1.First, select the panel you want to be your scroll view and right-click anywhere in the Scene View to bring up the context menu, then choose Attach -> Scroll View. 2.The last step is to add the UIDragScrollView script to at least

NGUI 学习笔记实战——制作商城

Unity3D的uGUI听说最近4.6即将推出,但是目前NGUI等UI插件大行其道并且已经非常成熟,所以我们还是先看眼前吧. 一.实现思想 商城的功能是很多游戏都拥有的,按下一个界面按钮,弹出一个窗体. 然后是商城中的商品可以拖动,既可以用手,也可以用滑条等等,至于点击购买就不单单是UI层的事了.等到实现NDate的时候再进行讨论. 二.实现背景 1.NGUI->Open->Prefab tool bar ,拖一个black widget进去 2.之后布局如下,这些应该没什么难度,弄好锚点,d

NGUI学习笔记汇总

欢迎来到unity学习.unity培训.unity企业培训教育专区,这里有很多U3D资源.U3D培训视频.U3D教程.U3D常见问题.U3D项目源码,[狗刨学习网]unity极致学院,致力于打造业内unity3d培训.学习第一品牌. NGUI学习笔记 一.NGUI的直接用法 1. Attach a Collider:表示为NGUI的某些物体添加碰撞器,如果界面是用NGUI做的,只能这样添加.(注:用Component添加无效). 2. Attach an Anchor:表示为该物体添加了UIAn

Lua学习笔记(六):函数-续

Lua中的函数是带有词法定界(lexical scoping)的第一类值(first-class values).第一类值指:在Lua中函数和其他值(数值.字符串)一样,函数可以被存放在变量中,也可以存放在表中,可以作为函数的参数,还可以作为函数的返回值.词法定界指:嵌套的函数可以访问他外部函数中的变量.这一特性给Lua提供了强大的编程能力. Lua中关于函数稍微难以理解的是函数也可以没有名字,匿名的.当我们提到函数名(比如print),实际上是说一个指向函数的变量,像持有其他类型的变量一样:

laravel3学习笔记(六)

原作者博客:ieqi.net ==================================================================================================== ORM Laravel3中MVC体系中Model里最重要的组成部分无疑是ORM了,ORM — object-relational mapper — 将数据操作面向对象化,使得整个web框架的核心风格统一,降低整体复杂度,为开发者提供便利. Laravel3中的ORM叫

python之raw_input()(学习笔记六)

python之raw_input()(学习笔记六) 我们经常使用raw_input()读取用户的输入,如下例子所示: >>> name = raw_input('please input your name:'),截图如下: 下面简单说下,raw_input()与if搭配使用,脚本如下: #!/usr/bin/env python # -*- coding:utf-8 -*- birth = raw_input('birth:') if birth < 2000: print '0

NGUI学习笔记-UISprite

所有的Sprite使用前,得先准备个图集,然后选择里面的图片进行填充 UISprite里面有几个属性做个笔记: Type: Smple:除了显示内容从图集里面获取外,其他都和Texture一样的绘制 Sliced:这个模式支持九宫格拉伸,让四个角落的图片不变型,点击Sprite右侧的Edit按钮可以进行Sprite数据的编辑,设置Border的值即可. Tiled:瓦片填充,会平铺进行填充 Filled:这个主要用来做技能CD.进度条等用.FillDir设置填充的模式(360度扇形,水平,垂直等

swift学习笔记(六)析构过程和使用闭包对属性进行默认值赋值

一.通过闭包和函数实现属性的默认值 当某个存储属性的默认值需要定制时,可以通过闭包或全局函数来为其提供定制的默认值. 注:全局函数结构体和枚举使用关键字static标注    函数则使用class关键字标注 当对一个属性使用闭包函数进行赋值时,每当此属性所述的类型被创建实例时,对应的闭包或函数会被调用,而他们的返回值会被作为属性的默认值. ESC: Class SomeCLass{ let someProperty:SomeType={ //给someProperty赋一个默认值 //返回一个与

java之jvm学习笔记六-十二(实践写自己的安全管理器)(jar包的代码认证和签名) (实践对jar包的代码签名) (策略文件)(策略和保护域) (访问控制器) (访问控制器的栈校验机制) (jvm基本结构)

java之jvm学习笔记六(实践写自己的安全管理器) 安全管理器SecurityManager里设计的内容实在是非常的庞大,它的核心方法就是checkPerssiom这个方法里又调用 AccessController的checkPerssiom方法,访问控制器AccessController的栈检查机制又遍历整个 PerssiomCollection来判断具体拥有什么权限一旦发现栈中一个权限不允许的时候抛出异常否则简单的返回,这个过程实际上比我的描述要复杂 得多,这里我只是简单的一句带过,因为这

初探swift语言的学习笔记六(ARC-自动引用计数,内存管理)

Swift使用自动引用计数(ARC)来管理应用程序的内存使用.这表示内存管理已经是Swift的一部分,在大多数情况下,你并不需要考虑内存的管理.当实例并不再被需要时,ARC会自动释放这些实例所使用的内存. 另外需要注意的: 引用计数仅仅作用于类实例上.结构和枚举是值类型,而非引用类型,所以不能被引用存储和传递. swift的ARC工作过程 每当创建一个类的实例,ARC分配一个内存块来存储这个实例的信息,包含了类型信息和实例的属性值信息. 另外当实例不再被使用时,ARC会释放实例所占用的内存,这些