解说NGUI组件参数总结

2015年03月13日 13:19 0 点赞 0 评论 更新于 2025-11-21 16:57

今天学习了NGUI的课程,下面为大家总结一些小知识点,希望对大家有所帮助。

UICamera

UICamera可以添加到任何相机上,它包含事件系统,是每个UI的重要组成部分,负责发送相机中所有NGUI的活动。

如果场景中仅有一个相机,要确保它附有UICamera脚本;如果有多个相机,要确保至少用来渲染UI的相机有UICamera脚本。当将这个脚本放在主相机上时,游戏场景中的所有对象都将拥有OnClick、OnHover、OnDrag等事件。

参数

  • Tooltip Delay:设定悬停在对象上多少秒才执行OnTooltip事件。
  • 相机尺寸设置:如果使用Orthographic Projection相机,建议将相机的Size尺寸设置为当前分辨率高度的一半。例如,针对iPad的屏幕1024 * 768分辨率,应设置Size为384。另一种方法是保持Size为1,将UI的Root缩放到该值的倒数,比如在iPad上获得完美尺寸需要将Root的缩放到1/384(即0.002604167)。第二种方法较容易实行,但物体在场景视图中比其他物体会小。若不知道如何设置正交相机的尺寸,可以参考相关图示。

UIAtlas

UIAtlas用于定义精灵的纹理图,它是一个容器,包含了一堆sprite的坐标信息。可以这样理解:使用一张包含很多小贴图的大贴图比使用若干张小贴图更有效率。大贴图中的小贴图被称为精灵(sprite),大纹理则称为图集(atlas)。

在使用NGUI之前,需要创建一个图集(或使用现有的),可以从相关资料了解图集的制作方法。当然,也可以直接使用UITexture,但它不能解决所有问题。

参数

  • Material:描述绘制本图集的材料,通常推荐使用unlit着色器,例如为NGUI使用.Unlit - Transparent Colored。
  • TP Import:用于导入从TexturePacker导出的精灵,只需拖拽输出的Txt文件和所有精灵即可。
  • Coordinates:允许从基于像素的坐标系切换为基于UV的坐标系。通常以像素坐标系制作,但如果需要重新调整纹理,则要先切换为纹理坐标。
  • New Sprite:允许以当前选择的精灵为范本创建新的精灵。
  • Delete:删除所选精灵。
  • Sprite:可以通过下拉列表选择所有正在使用的精灵。
  • Edit Name:重命名精灵的名称。
  • Outer Rect:设置精灵的外边框。
  • Inner Rect:设置精灵的内边框,若不使用UISlicedSprite,可以跳过此设置。
  • Padding:微调校正精灵的偏移量。
  • Correction:基于完美整数像素校正精灵的坐标。
  • Show:检查精灵在图集中的位置。

提示

  • 可以将精灵组织成组创建多个图集,只要图集共享相同的材质,控件仍会使用较少的DrawCall。
  • 为达到最佳效果,推荐将纹理的wrap模式设置为"Clamp",将格式设置为"Truecolor"。
  • 将类似的纹理做成一个图集是不错的方式,但要尽量减少同时使用的图集数量。
  • 如果使用Texture Packer工具来创建图集,要在输出设置中选择unity3d。
  • 若用photoshop创建图集,可以通过选择工具配合info panel面板来找出精灵的位置和尺寸。

UIFont

UIFont可以设置UI所使用的字体数据和材质,可以使用免费的BMFont,或更专业的Glyph Designer。一般只需制作一次字体,保存为一个预设,作为新标签所用的字体。

参数

  • Import Font:用于导入Glyph Designer或BMFont输出的FNT(改后缀为TXT)数据。
  • UIAtlas:用来设置字体纹理所在的图集,根据是否已选定UIAtlas,会有以下选项:
  • 如果UIAtlas已指定,可以选择使用字体的精灵。
  • 如果没有指定UIAtlas,可以选择用来绘制字体的材质。在NGUI中通常使用"Unlit"类别下的着色器,如“Unlit - Transparent Colored”。
  • 可以调整字体在材质纹理内的像素矩形,还能快速校正完美像素坐标,四舍五入到最近的像素值。
  • Spacing:可以调整字符之间的间距。
  • Show:检查字体在纹理贴图中的位置。

提示

  • 为达到最佳效果,推荐将纹理的wrap模式设置为"Clamp",将格式设置为"Truecolor"。
  • 可以将多个字体合并为一个图集,这样整个UI使用这些字体时,仍会保持一个DrawCall。
  • 可以给字体增加斜角、阴影、描边等效果,只要确保BMFont导出之前设置好足够的边距和间距即可。

UISprite

UISprite相对不常用(第一个不常用的是UITexture),其唯一用途是绘制地图集的一部分。

参数

  • Transform:是非常重要的组件,每个控件都可通过Transform进行位置和大小的调整,它也会影响"Make Pixel - Perfect"。可以在它和UICamera之间任选一个来进行"完美像素"的调整。
  • UIAtlas:用来指定所使用的图集,可以拖拽或者按下左侧的按钮选择最近使用的图集。
  • Sprite:选择图集中使用的精灵。选择好精灵后,点击"Make Pixel - Perfect"会自动调整Transform的尺寸。
  • Depth:避免使用Unity的Z排序(效率不佳),如果要旋转UI窗口,单纯通过调整每个控件的Transform的Z轴来排序是不可行的,所以要用这个深度来排序。
  • Color Tint:用来调整色调。
  • Make Pixel - Perfect:让控件的尺寸快速调整到实际像素尺寸。
  • Pivot:选择部件的坐标原点位置。
  • Preview:预览精灵的纹理。

提示

  • 如果看到两个控件有闪烁,意味着设置了相同的Depth导致重叠,需要调整不同的深度以避免重叠。
  • 不要把多个控件混在一起,否则会影响完美像素功能。添加新控件时要注意创建新的子对象。
  • 也可以在使用完美像素按钮后再移动组合控件。

Label

UILabel用于显示文字,支持多行,只需用"\n"换行即可,允许用[RrGgBb]来创建彩色文字。

参数

  • Transform:重要组件,每个控件可通过它进行位置和大小的调整,影响"Make Pixel - Perfect",可在它和UICamera之间任选一个进行"完美像素"的调整。
  • UIFont:可以选择用于这个标签的字体,可拖拽预设或者按下按钮选择最近使用的字体。
  • 可以通过使用"\n"决定标签是多行还是单行,同样可以用16进制颜色值来定义彩色文字,以[RrGgBb]开始,以[-]结束。例如"Hello [FF0000]World[-]!",结果是World为红色文字。
  • Line Width:指定文字行的最大宽度,若是单行文本则切掉超出部分,若是多行文本则会根据宽度自动换行。
  • Multi - line:选择该项后,标签达到最大宽度后会自动换行。
  • Password:勾选后字符将自动转为星号。
  • Encoding:勾选后会关闭特殊字符处理,一般用于输入框。
  • Depth:改变标签控件的层级。
  • Color Tint:更改文本的主色调。
  • Make Pixel - Perfect:让控件的尺寸快速调整到实际像素尺寸。
  • Pivot:选择部件的坐标原点位置。
  • Preview:预览精灵的纹理。

提示

  • 如果看到文本闪烁或被其他控件覆盖,需要调整其深度。
  • 遇到复杂字符串(如斜体、标点、括号混合的)时,需要增加行宽度以避免超宽。
  • 用"\n"和颜色设置,仅一个标签就可以实现特定效果。

UIPanel

UIPanel负责创建实际的几何体,不必特别添加UIPanel,只要创建一个控件,它就会自动被添加。可以创建多个Panel,用于多个菜单。

参数

  • Normals:显示法线,用于检查UI正反是否正确。
  • Gizmos:用来显示几何体,可供选取。
  • Debug:配合调试检查场景视图的几何体,若开启此选项,应取消上面的Gizmos选项。
  • Widgets:显示该Panel上有多少个控件。
  • Draw Calls:可以看到使用了多少个DrawCall,数值越低越好。
  • Clipping:可以选择要显示的部分,默认不进行裁切,利用着色器进行裁切。若开启此选项,NGUI将自动切换为有裁切属性的着色器。若开启裁切,可以通过Center和Size来设置裁切盒,单位为像素。若选择柔化边缘裁切,将会有40像素的柔化边缘用于处理柔化效果。
  • Material:只读,可查看面板使用了多少个材质,一个材质将占用一个DrawCall。

提示

  • 默认情况下,如果没有UIPanel,会由最根的控件创建并作为其父对象。最好让多个控件使用一个父对象,便于管理。
  • 如果Panels下没有控件,可以放心删除这个面板。
  • 如果删除一个存有控件的Panels,它和其下面的控件都会消失,但播放时,所有控件又会重现,因为会自动创建一个新的UIPanel。
  • 当没有变化时,几何体不会重建,这意味着如果有完全静止的UI,不会每帧都更新几何形状,相反它会被重用,以提高性能。

UIAnchor

UIAnchor有多种用途,包括在多种分辨率的屏幕上进行相对定位,能让控件自动配合屏幕尺寸,填充满屏并保持真实像素尺寸的UI。

参数

  • HUD Camera:用于绘制该对象的相机,通常会自动选择。
  • Side:设置锚点,有4个边、4个角和中心可供选择。
  • Half Pixel Offset:让控件有半像素的位移,以避免DirectX 9在Windows机器上的一个Bug。
  • Stretch To Fill:缩放填充,一般在做背景时使用。
  • Depth Offset:用于基于透视相机时调整计算点的深度。

提示

  • 如果对象有UIAnchor脚本,其自身的Transform将不接受修改,因为它受控于该脚本。若希望添加基于这个锚点的位移,可以添加一个子对象。例如,希望有个控件始终在屏幕偏移(100, 100)的位置,应在层次面板设置为UI->Anchor->Offset->Widget的结构。
  • UIAnchor同样可用于非正交相机。
  • 如果UIOrthoCamera附加到相机,用UIAnchor创建的界面将固定尺寸和位置,无论屏幕尺寸如何改变。

Events - NGUI强大的事件系统

UIEvents - 事件系统

可以将以下方法脚本添加到控件或者带有碰撞盒的游戏对象上,也可以赋予给相机,但相机需同时有UICamera脚本:

  • void OnHover (bool isOver):当鼠标移出或者悬停在某个碰撞器上时返回布尔值,在触摸设备上无效。
  • void OnPress (bool isDown):当鼠标或者触摸到碰撞器时返回布尔值。
  • void OnSelect (bool selected):当鼠标或者触摸从OnPress发生后的释放时返回该布尔值。
  • void OnClick():与OnSelect的产生条件相同,当点击或触摸碰撞器并且没有发生拖拽时触发。
  • void OnDrag (Vector2 delta):当移动鼠标或者触摸按下时位移超过特定阀值时触发。
  • void OnDrop (GameObject drag):当鼠标或触摸释放于从发生OnDrag的不同碰撞器上时触发,传递的参数是产生OnDrag的游戏对象。
  • void OnInput (string text):当一个OnSelect发生后在同一个碰撞器上触发输入,一般只有UIInput使用。
  • void OnTooltip (bool show):当鼠标悬停超过tooltipDelay时间后触发该命令,在触摸设备上无效。

可以用UICamera.lastCamera找到发出事件的对象,用UICamera.lastHit得到接受事件的对象,用UICamera.lastTouchPosition得到触摸或屏幕的位置。

例如,将以下脚本赋予一个碰撞器时,点击这个碰撞器会输出HelloWorld:

// 这里应补充点击输出HelloWorld的脚本代码示例

作者信息

boke

boke

共发布了 3994 篇文章