UI系统-NGUI
NGUI
创建NGUI
- Project面板左键 或者在导航栏 选择NGUI
- 选择Create 2D UI
UI Root
Scaling Style 分辨率自适应模式
Flexible 灵活模式
- 在该模式下 UI都是以像素为基础,100像素的物体无论在多少分辨率上都是100像素
- 这就意味着 100像素在分辨率低的屏幕上可能显示正常 但是在高分辨率的屏幕上就很小
Flexible模式的配置参数
- Minimum Height 屏幕高度小于该值时 开始按比例缩放
- Maximum Height 屏幕高度 大于该值时 开始按比例缩放
- Shrink Portrait UI 竖屏时 按宽度来适配
- Adjust By Dpi 使用dpi做计算 建议勾选
Constrained 约束模式
- 在该模式下 屏幕按尺寸比例来适配 不管实际屏幕有多大
- NGUI会通过合适的缩放来适配屏幕
- 好处是在各个设备上看到的ui和比例是一样的 但是有可能会因为缩放显示模糊
Constrained 参数
- Content Width 按照该宽度值适配屏幕(制作资源时的默认分辨率宽)
- Content Height 按照该高度值适配屏幕(制作资源时的默认分辨率高)
- Fit表示以哪个值来做适配
- Width:UI会横向填充屏幕
- Height:UI会纵向填充屏幕
- 两个都勾选 不会被裁剪 但是会有黑边 当宽高比大于实际宽高比时 按宽度适配 反之按高度适配
- 两个都不勾选 始终保证屏幕被UI填充满 不会有黑边 但内容可能会被裁剪
Constrained On Mobile 混合模式
- PC使用灵活模式 移动端使用约束模式
Panel
- 负责管理一个UI面板上所有子控件的渲染
- UIRoot中也有一个Panel
- 在老版本NGUI中叫做UI Panel
Panel参数
- Alpha 控制所有子控件的透明度
- Depth 控制该Panel的渲染优先级 层级高的后渲染 会把先渲染的挡住
- Clipping 裁剪
- None 不处理 默认
- Texture Mask 根据图片信息进行遮罩
- Soft Clip 自己定义裁剪范围
- Constrain But Dnot Clip 约束但不裁剪 不裁剪画面 值影响相应范围
- Sorting Layer排序层级
Advance Options 不常用
- Advanced Options 渲染相关高级选项
- Render 渲染队列
- Sort Order 排序
- Normals是否需要灯光着色器
- UV2 是否用于自定义着色器效果
- Shadow Mode
- Cull 元素插件拖动时提出
- Visible 检查元素组件是否离开屏幕
- Padding 边界内容
- Offset 抵消偏移位置
- Static 检查子元素是否会移动
- Panel Tool 是否显示面板工具
- Anchors锚点设置 用于分辨率自适应设置大小
EventSystem
- 主要作用是让摄像机渲染出来的物体能够接收到Ngui的输入事件 大部分设置不需要我们主动修改
- 有了它我们可以通过鼠标 键盘 控制器等等 操作ui 相应玩家的输入
- 在老版本的Ngui中叫做UI Camera
EventSystem参数
- EventType 事件类型 决定了脚本如何对鼠标和触屏事件进行相应
- UI模式 会根据UI组件的深度来检测
- World模式 根据距离主摄像机的远近 进行检测
- 2D和3D的区别 碰撞盒是用3D的还是2D的区别
- Events go to 事件通过刚体还是碰撞盒来传递
- Process Events In 事件的更新是在Update还是LateUpdate中 一般不会修改
- Event Mask 决定哪个游戏对象层级会接受事件
- Debug 是否开启调试模式
- Command Click 苹果电脑上是否启用Command按键模拟右键操作
- Allow Multi Touch 是否支持多点触控
- Auto Hide Cursor 当游戏又控制器或者其他输入设备时是否自动隐藏光标
- Sticky Tooltip是否使用tooltip
- Long Press Tooltip 是否长按出提示
- Tooltip Delay 停留多久出现tip
- Raycast Range 射线长度 一般不修改
- EventSources 接收的事件来源 键盘 鼠标 等等
- Thresholds调整鼠标事件的 点击 拖 轻拍等行为
- Axes and key 热键关系 一般不修改
图集
- NGUI中的最小图片控件Sprite要使用图集中的图片进行显示
- 图集 就是把很多单独的小图 合并为一张大图
- 目的是为了提高渲染性能
打开图集制作器
- 方法一 在Project右键打开
- 方法二 导航栏Ngui - Open - Atlas Maker
图集关键文件
- 图集文件
- 图集材质
- 图集图片
图集工具参数
- Padding 每个图片的像素间隔
- Trim Alpha 移除图片多余的空白控件(抠图)
- PMA Shader 预乘透明通道
- Unity Packer 自定义打包器
- Truecolor 强制ARGB32纹理
- Auto-upgrade 自动更新 用精灵替换纹理
- Force Square 如果启用强制 生成后的图集长款都为2的n次方(部分老的ios设备只支持正方形图集)
- Pre-processor 预处理器
Sprite 精灵
参数
- Atlas图集
- Sprite 图集中的精灵图片
- Material 材质 一般不会修改
- Fixed Aspect 是否固定宽高比
- Type 图片类型
- Simple 普通模式
- Sliced 九宫格切片
- Tiled 平铺模式 图片会重复绘制
- Filded填充模式 可以做CD 进度条等
- Advanced 高级模式 可以把图片分成五个部分 分别设置模式
- Flip翻转模式
- 水平翻转
- 垂直翻转
- 水平垂直翻转
- Gradient 渐变色 勾选后上部颜色和下部颜色自动渐变
- Color Tint 颜色叠加
公共内容 Widget
- Pivot控制对象锚点
- Depth深度层级 决定渲染顺序
- Size 尺寸
- Aspect 宽高比
Label
- Font 字体 使用Untiy字体可以使用fft字体文件 也可使用NGUI字体图集
- Material材质 一般不会修改
- FontSize 字体大小
- Text 显示内容
- Modifier 修饰方式
- None 没有限制
- To Uppercase 大写字母
- To Lowercase 小写字母
- Custom 自定义
- Overflow
- Shirnk Content 收缩内容
- Clamp Content 夹紧内容
- Resize Freely自动调整大小
- Resize Height 自动调整高
- Label控件高度会无法手动调节 会随着字体内容大小会自动改变
- Alignment 字体的对其方式
- Keep crispp 动态字体锐化
- Never从不
- On Desktop和Always 区别不大都会开启
- Gradient 渐变
- Effect特效
- None没有特效
- Shadow 阴影效果
- OutLine 边缘线
- Float spacing 开启浮点数间隔调整 默认整形
- Spacing 字符间隔
- Max Lines 最大行数
- BBCode是否开启富文本
- Color Tint 字体颜色
富文本
[ff000]颜色
[b]加粗[/b]
[i]斜体[/i]
[u]下划线[/u]
[s]删除线[/s]
[sub]下角标[/sub]
[sup]上角标[/sup]
[url = http://baidu.com/]超链接[/url]如果希望点击超链接可以打开页面 需要添加碰撞体 和脚本Open URL On Click
Texture 大图控件
- Sprite 只能显示图集中的图片 一般用于小图片
- 大尺寸的图片 没有必要打成图集 所以使用Texture显示
- Testure参数 基本上和Sprite 控件一样
NGUI组合控件 按钮
- 在三个基础组件对象上 添加对应组件
- 如果希望响应点击事件 需要添加碰撞器
制作Button
- 一个Sprite
- 为Sprite添加Button脚本
- 添加碰撞器
Button参数
- Twen Target 按钮控制的目标 一般是三个基础控件之一 会自动设置
- DragOver 一般不会使用
- Transition 颜色渐变的时间
- Colors 按钮各个状态的颜色设置
- Sprites 按钮各状态的图片设置
- OnClick 点击按钮响应脚本
Button监听事件的两种方式
- 拖脚本
- 代码获取按钮添加监听
btn.onClick.add(new EventDelegate(ClickDoSomthing));
public void ClickDoSomthing(){
print("按钮被点击");
}Toggle单选框多选框
创建Toggle
为Sprite添加Toggle和碰撞器脚本 然后绑定一个Sprite
Toggle参数
- Group分组 单个多选框分为一组 变成单选框
- State of None 单选框状态时 是否允许不选中
- Starting State 开始默认状态 默认为选中
- Sprite 选中用的图片
- Invert State 反装显示 如果选中不显示 不选中显示
- Animator 状态变化时播放动画 新动画系统
- Animation 状态变化时播放动画 老动画系统
- Tween 状态变化时缓动
- Transition 过渡模式
- OnValueChange 状态变化时响应脚本
获取Toggle状态
toggle.value;输入框
创建输入框
为Sprite添加Input和碰撞器脚本并绑定一个Lable组件
输入框参数
- Label关联的文本组件
- Starting Value 开始默认显示的内容
- Saved As 会使用PlayerPrefs将输入内容保存 这里填写key 一般不用
- ActiveTextColor 选中激活时的颜色
- Inactive Color 未选中失活时的颜色
- Caret Color 插入的光标颜色
- Selection Color 选中文字的背景颜色
- Input Type输入类型
- Standard默认模式
- Auto Correct自动更正
- Password 密码输入
- Vaildation输入限制
- None 无限制
- Integer只能输入整形
- Float 浮点数
- Alphanumeric 只能是数字或者字母
- Username 用户名
- Name 姓名
- Filename 文件名
- MoblieKeyboard 手机键盘模式
- Default 英文呢
- ASCII Capable 数字符号
- Number And Puntuation 数字和符号
- URL 链接
- Number Pad 数字
- Phone Pad 手机
- Name Phone Pad 名字
- Email Address 邮箱地址
- Hide Input 键盘下 隐藏输入框
- On Return Key 回车键 操作
- Character Limit 最大可输入字符数
- OnSubmit 输入完成时相应脚本
- OnChange 输入变化时响应脚本
下拉列表
创建下拉列表
创建一个Sprite和一个Label 在Sprite添加碰撞体和Popup List
下拉列表参数
- Options 下拉列表显示内容 每一行表示一个内容
- Position 列表出现位置
- Auto 自动
- Above 向上
- Below向下
- Selection选中操作
- On Press 按下选中
- On Click点击选中
- Alignment对齐方式
- Automatic自动对其
- Left 左对齐
- Center剧中对其
- Right右对齐
- Justifired 调整会自动变化
- Open on 列表打开方式
- 点击或触碰
- 右键
- 双击
- 手动(相当于关闭 需要用代码处理)
- On Top始终显示在所有面板之前 默认选择
- Localized 是否对弹出列表的值进行本地化
- Keep Value 始终保持有列表中的某个默认值
- 将值显示在lable上
- 需要将lable拖到on vlue change中 调用lable的SetCurrentSelection方法
- Atlas图集
- Background修改下拉列表的背景图
- Highlight 修改下拉列表选中的背景
- Background 背景颜色叠加
- Highlight 选中高亮叠加颜色
- Overlap 弹出窗口边框与打开它的内容重叠的数量
- Animated 是否有默认的弹出动画 禁用可以节约性能
- Font 字体
- Font 字体
- Font Size 字体大小
- TextColor 字体颜色
- Padding 便宜位置
Silder 滑动条
创建滑动条
需要创建3个Sprite 并在背景Sprite 上添加slider组件和碰撞器
滑动条参数
- Value 当前值
- Steps 步数 将滑动条平分多少份
- Appearace 外观设置
- Foreground 前景用于缩放
- Background 背景
- Thumb 拖动快
- Direction 拖动方向
- Left To Right 从左到右
- Right to Left 从右到左
- Bottom To Top 从下到上
- Top to Buttom 从上到下
- OnValueChange 值变化时监听的脚本
Scrollbar滚动条
创建Scrollbar
- 创建两个Sprite 一个背景和一个滚动条
- 背景作为父对象 并添加碰撞器和Scrollbar组件
Scrollbar参数
和Silder基本一致
ProgressBar进度条
创建ProgressBar
- 创建两个Sprite 一个背景 一个进度条
- 背景作父对象 添加ProgerssBar组件
ScrollView滚动视图
创建滚动视图
- NGUI-Create-ScrollView
- 若需要Scrloobar 需要自行添加
- 添加子对象 子对象需要添加Drag Scroll View 和碰撞器
滚动视图参数
- Content Origin 内容子对象对齐方式
- Movement拖曳方向
- Horizontal 水平
- Veritcal垂直
- Unrestricted自由
- Custom自定义
- Drag Effect拖动特效
- None 不适用任何效果
- Momentum 惯性效果
- Momentum And Spring 弹性效果和弹力效果
- Scroll Whell Factor 滚动因子 如果不为0 鼠标滚轮可以滚动它 控制鼠标滚轮的速度和方向
- Momentum Amount 动量 拖拽一下鼠标 动的快慢 可以理解为是惯性的大小
- Sppring Strenth 弹力大小
- Dampen Strength 阻尼强度 影响回弹效果
- Restrice Within Panel 将内容限制在Panel 中不勾选不会产生弹力效果
- Constrain On Drage 阻力约束 一般不会修改
- Cancel Drag if fits 若勾选 滚动视图的内容是否应该是可动的 取决于他们当前的子对象是否溢出
- Smooth Drag Start 平滑拖动 一般不修改
- IOS Drag Emulation ios阻力模拟 一般不修改
- SrollBars 滚动条关联
- Horizontal 水平滚动条
- Veritcal 垂直滚动条
- ShowConditon 显示时机
- Always 一直显示
- Only if Needed 需要时显示
- WhenDragging 拖动时显示
Drag Scroll View
- 添加Drag ScrollView 即可在滚动视图中被拖动
- 参数可以不传 运行时会自动获取到
Grid表格布局
- Arrangement 排序对齐方式 水平 垂直 元素大小
- Cell width 元素框
- Cell Height 元素高
- Row Limit 元素个数 设置后超过设置的数量会自动换行
- Sorting 排序顺序
- None 没有排序
- Alohabetic按字母排序
- Horizotal水平放置顺序
- Vertical 垂直放置顺序
- Custom 自定义
- Inverted倒转 如果选择了排序方式 勾选这里可以翻转排序规则
- Pivot 锚点位置
- Smooth Tween 平缓缓动动画 是否会平滑的将子对象设置为正确的位置
- Hide Inactive 是否隐藏不活动的组件
- Constrain To Panel 约束面板 是否将网络子对象的更改通知父容器Panel 用于更新Scrollbar等信息
Anchor锚点组件
- 老版本——锚点组件——用于控制对象对齐方式
- 新版本——3大基础控件自带 锚点内容——用于控制对象相对父对象布局
老版本——锚点组件
- UICamera 关联UI摄像机
- Container控制的容器对象
- Side 九宫格位置
- Run Only Once 是否只对其一次
- Relative Offset 相对比例位置偏移
- Pixel Offset 像素偏移位置
新版本——基础控件自带锚点信息
- Type 尺寸对齐方式
- None 无
- Unified 统一模式
- Advance 高级模式
- Execute什么时候执行更新
- Target 相对目标
EventListener和EventTrigger
- NGUI提供了一些利用反射调用的特殊响应函数
- 经过 OnHover 按下 OnPress等等 可以直接写在脚本中 挂载到ui对象中
- NGUI会自动调用
- UIEventListener和UIEventTrigger封装了所有的特殊响应函数
UIEventListener
//如果这个对象没有挂载UIEventListener 则会添加一个并返回
UIEventListener listener = UIEventListener.Get(A.gameObject);
listener.onPress += (obj, isPress) => {
print(obj.name + "被按下或者抬起了" + isPress);
};UIEventTrigger
- UIEventTrigger 适合Inspector面板 关联脚本添加
- UIEventTrigger中的方法没有参数 但是可以在Inpector面板中 通过拖拽的方式添加委托函数
DrawCall
- DrawCall就是CPU(处理器)准备好渲染数据(顶点,纹理,法线,Shader等等)后告知GPU(图形处理器-显卡)开始渲染(将命令放入命令缓冲区)的命令
- 一次DrawCall就是 CPU准备好渲染数据通知 GPU渲染的这个过程
- 假设我们创建10000个小文件,每个文件大小为1kb,然后把这些文件拷贝到另一个文件夹中你会发现,即使这些文件加起来不超过10MB,但是拷贝花费的时间是很长的如果我们单独创建1个10MB的文件拷贝到另一个文件夹,基本可以瞬间拷贝完毕
如何降低DrawCall
在UI层面上 小图合大图——>即多个小DrawCall变一次大DrawCall
制作图集,可以有效的减低Drawcall,但不同图集之间会打断Drawcall的合并。 假设有A、B、C 三张图集。 节点结构1: AAABBBCCC,这样的排序下会产生3个Drawcall; 节点结构2: ABCABCABC,这样的排序下会产生9个Drawcall; 那么我们在制作过程中节点的排序需要尽量保证相同材质按照 结构1 紧挨着渲染,避免交叉渲染导致
制作UI时降低DrawCall的技巧
- 通过NGUI Panel上提供的DrawCall查看工具
- 注意不同图集之间的层级关系
- 注意Label的层级关系
NGUI字体
- NGUI内部提供了字体制作工具
- 可以根据字体文件 生成指定内容文字的图集 达到降低DrawCall的目的
- 还可以导入 外部第三方工具(BitmapFont)生成的字体图集
- 通过第三方工具 可以自定义美术字体 然后导入到ngui的字体制作工具中
如何选择Unity动态字体 和NGUI字体
- 文字变化较多用Unity动态字体 变化较少用NGUI字体
- 想要减少DrawCall用NGUI字体
- 美术字用NGUI字体
NGUI缓动效果
给UI组件添加Tween组件 就可以实现缓动效果
参数
- From开始状态
- To 结束状态
- PlayStyle播放方式
- Once 一次
- Loop循环
- PingPong 从头播放到尾 再从尾播到头
- Animation Curve 动画取消 可以调整两个值的曲线变化
- Duration 持续时间
- Start Delay 开始播放前的延迟时间
- Delay Affects 延迟影响
- TweenGroup 分组ID 用于一个对象多个动画时分组
- Ignore TimeScale 忽略TimeScale
- Use Fiexd Update 使用物理帧更新动画
Play Tween控制缓动效果播放
- 给需要控制缓动效果的ui组件添加Play Tween组件
- Play Tween可以添加多个 通过不同的事件来触发
参数
- Tween Target 控制对象 可以自动关联 也可以手动指定
- Include Children 是否带着子对象一起变化
- Start State 如果勾选 则在触发激活前 PlayTween将在启动时将所有关联的Tween重置为起始状态
- 可以理解为 默认不播放缓动效果 通过事件去控制它
- TweenGroup 控制是那一组缓动
- 对应Tween Scale的分组id
- Trigger Conditon 触发条件
- Play Direction 播放的方向
- Reverse翻转播放
- 一开始就是结束状态 往回播放
- Toggle正反状态转换
- 每次播放 变换方向
- Forward正向播放
- Reverse翻转播放
- If target is disabled 如果控制的对象失活 处理方式
- Do Nothing 什么也不做
- Enable Then Play 播放时激活它
- Ignore Disabled State 忽略失活状态
- On activation 激活时
- Continue From Current 继续播放
- Restart Tween重新开始
- Restart if Not Playing 如果没有播放重新开始
- When finished 播放完毕做什么
- Disable After Reverse 执行完后隐藏
- Do Not Disable 什么也不做
- Disable After Forward 如果是倒着播 播完后隐藏
NGUI中显示3D模型
方法一:
- 使用UI摄像机渲染3D模型
- 改变NGUI的整体层级 为 UI层
- 改变主摄像机和NGUI摄像机的 渲染层级
- 将想要被UI摄像机渲染的对象层级改为 UI层
- 调整模型和UI控件的Z轴距离
方法二:
- 使用多摄像机渲染 Render Texture
- 让Panel和粒子特效处于一个排序层
- 在粒子特效的 Render参数中 设置自己的层级
NGUI不常用组件
PlaySound 脚本
可以根据事件类型 播放音效
KeyBinding 脚本
和键盘案件绑定触发按钮等
KeyNavigation 脚本
可以通过tab 上下左右按键等 快捷的选中按钮
语言本地化
- 在Resources下创建一个txt文件 命名必须为Localization
- 配置文件
- 给想要切换文字的Label对象下挂载Localize 关联Key
- 给用于切换语言的下拉列表下添加脚本LanguageSelection
NGUI中显示3D模型
方法一:
- 使用UI摄像机渲染3D模型
- 改变NGUI的整体层级 为 UI层
- 改变主摄像机和NGUI摄像机的 渲染层级
- 将想要被UI摄像机渲染的对象层级改为 UI层
- 调整模型和UI控件的Z轴距离
方法二:
- 使用多摄像机渲染 Render Texture
- 让Panel和粒子特效处于一个排序层
- 在粒子特效的 Render参数中 设置自己的层级
NGUI不常用组件
PlaySound 脚本
可以根据事件类型 播放音效
KeyBinding 脚本
和键盘案件绑定触发按钮等
KeyNavigation 脚本
可以通过tab 上下左右按键等 快捷的选中按钮
语言本地化
- 在Resources下创建一个txt文件 命名必须为Localization
- 配置文件
- 给想要切换文字的Label对象下挂载Localize 关联Key
- 给用于切换语言的下拉列表下添加脚本LanguageSelection
NGUI中显示3D模型
方法一:
- 使用UI摄像机渲染3D模型
- 改变NGUI的整体层级 为 UI层
- 改变主摄像机和NGUI摄像机的 渲染层级
- 将想要被UI摄像机渲染的对象层级改为 UI层
- 调整模型和UI控件的Z轴距离
方法二:
- 使用多摄像机渲染 Render Texture
- 让Panel和粒子特效处于一个排序层
- 在粒子特效的 Render参数中 设置自己的层级
NGUI不常用组件
PlaySound 脚本
可以根据事件类型 播放音效
KeyBinding 脚本
和键盘案件绑定触发按钮等
KeyNavigation 脚本
可以通过tab 上下左右按键等 快捷的选中按钮
语言本地化
- 在Resources下创建一个txt文件 命名必须为Localization
- 配置文件
- 给想要切换文字的Label对象下挂载Localize 关联Key
- 给用于切换语言的下拉列表下添加脚本LanguageSelection
NGUI中显示3D模型
方法一:
- 使用UI摄像机渲染3D模型
- 改变NGUI的整体层级 为 UI层
- 改变主摄像机和NGUI摄像机的 渲染层级
- 将想要被UI摄像机渲染的对象层级改为 UI层
- 调整模型和UI控件的Z轴距离
方法二:
- 使用多摄像机渲染 Render Texture
- 让Panel和粒子特效处于一个排序层
- 在粒子特效的 Render参数中 设置自己的层级
NGUI不常用组件
PlaySound 脚本
可以根据事件类型 播放音效
KeyBinding 脚本
和键盘案件绑定触发按钮等
KeyNavigation 脚本
可以通过tab 上下左右按键等 快捷的选中按钮
语言本地化
- 在Resources下创建一个txt文件 命名必须为Localization
- 配置文件
- 给想要切换文字的Label对象下挂载Localize 关联Key
- 给用于切换语言的下拉列表下添加脚本LanguageSelection
NGUI中显示3D模型
方法一:
- 使用UI摄像机渲染3D模型
- 改变NGUI的整体层级 为 UI层
- 改变主摄像机和NGUI摄像机的 渲染层级
- 将想要被UI摄像机渲染的对象层级改为 UI层
- 调整模型和UI控件的Z轴距离
方法二:
- 使用多摄像机渲染 Render Texture
- 让Panel和粒子特效处于一个排序层
- 在粒子特效的 Render参数中 设置自己的层级
NGUI不常用组件
PlaySound 脚本
可以根据事件类型 播放音效
KeyBinding 脚本
和键盘案件绑定触发按钮等
KeyNavigation 脚本
可以通过tab 上下左右按键等 快捷的选中按钮
语言本地化
- 在Resources下创建一个txt文件 命名必须为Localization
- 配置文件
- 给想要切换文字的Label对象下挂载Localize 关联Key
- 给用于切换语言的下拉列表下添加脚本LanguageSelection