UG4L24——动效
UG4L24——动效
本章代码关键字
12345678910gComponent.GetTransition() //获取组件上的动效Transition //动效类transition.Play() //播放动效,可以设置播放结束委托,播放次数与延迟,播放范围transition.SetPaused() //设置是否暂停transition.PlayReverse() //倒着播放动效transition.Stop() //停止播放动效transition.SetValue() //设置动效某个关键帧的帧数据transition.SetDuration() //设置动效的某个关键帧后的Tween的持续时间transition.ignoreEngineTimeScale //动效是否忽略Unity的Time.timeScalet ...
UG4L23——曲面UI
UG4L23——曲面UI
曲面UI
曲面UI指的就是想把UI界面显示在一个3D物体上
作为一个3D物体的贴图看,一般在VR、AR开发中常用
添加对应层
当使用曲面UI时,需要用到捕获UI成纹理的功能,所以需要定义VUI、Hidden VUI这两个Layer,否则会出现警告
这两个Layer可以随便定义到没使用的层序号,但要注意所有相机的Culling Mask都不选择这两个层
制作曲面UI
将制作好的3D模型,以曲面为例放入场景中
在模型上挂载一个UIPainter组件,这时会自动添加Mesh Collider和Mesh Renderer组件
像类似UIPanel一样在UIPainter上设置包名和组件名
发现曲面不是透明的,因此需要添加FairyGUI的ImageShader的材质球
最终得到的曲面的UI图像
UIPainter参数相关
Package Name:包名
Component Name:要显示的组件的名字
Sorting Order:排序层,当有多个曲面UI时,排序层越高显示在越前面
同层则由Z轴 ...
UG4L22——弹出功能
UG4L22——弹出功能
本章代码关键字
123456789GRoot.inst.ShowPopup() //弹出组件,该组件点击空白处时会隐藏GRoot.inst.HidePopup() //隐藏弹出的组件gObject.onRemovedFromStage.Add() //当弹出的组件关闭时会执行的委托PopupMenu //弹出菜单new PopupMenu() //如果不传入参数就默认使用全局资源弹出菜单,如果需要使用特定的资源需要传入该资源的URLUIConfig.popupMenu //默认的弹出菜单资源popupMenu.AddItem() //为弹出菜单添加选项及其监听函数,返回监听按钮popupMenu.Show() //显示弹出菜单popupMenu.SetItemGrayed() ...
UG4L21——窗口
UG4L21——窗口
本章代码关键字
12345678910111213141516171819Window //窗口类,该类可以继承,以封装窗口的逻辑window.Show() //显示窗口window.contentPane //设置窗口对应的组件window.Hide() //隐藏窗口window.isShowing //窗口是否在显示window.modal //设置窗口是否为模态窗口window.ShowModalWait() //锁定窗口window.CloseModalWait() //解除窗口的锁定OnInit() //窗口对象被实例化出来时执行的方法OnShown() ...
UG4L20——树
UG4L20——树
本章代码关键字
12345678GTree //FairyGUI的树类gTree.rootNode //获取树的根节点,该节点在面板上不可见,只有往该节点添加节点才能将内容显示在面板上GTreeNode //树的节点类gRootNode.AddChild() //向节点添加节点gTreeNode.cell //获取节点对应的组件,可以修改组件内容,仅限于根节点下的子节点,并且是要AddChild过后才能改,不建议使用这种方式gTree.treeNodeRender //当树的TreeNode需要更新时的回调委托,建议使用这种方式去进行树结构中内容的初始化gTree.onClickItem.Add() //当点击一个子节点 会调用该委托函数gTree.treeNodeWillExpand //用于监听树的某个节点展开折叠的委托
FairyGUI的树
树是列表的一种特例,是组件的一 ...
UG4L19——多国语言
UG4L19——多国语言
本章代码关键字
12XML //这是FairyGUI自带的XML类,可以读取多国语言相关的XML文本UIPackage.SetStringsSource() //加载语言文件,传入多国语言的XML对象,让接下来显示出来的文字元件按照语言文件上规定的显示
FairyGUI的多国语言解决方案
先拼界面,再翻译,把界面上的所有文字导出到一个文件,然后把这个文件提交翻译,运行时动态载入翻译好的文件
生成语言文件
菜单栏 ——> 工具 ——> 字符串导入与导出
不导出已标记为发布时清空的内容
例如文本,设置了发布时清空,如果这里勾选了,那么这个文本就不会出现在语言文件里
如果导出目标文件已存在,与目标文件合并(覆盖)
比如现在导出内容中包含1个id为x1的字符串值为a
而目标文件也存在一个id为x1的字符串,值为b,
则导出的结果文件里,x1的值为b
导出的文件包含了在UI上出现的所有文字(排除了纯阿拉伯数字),其中
name是唯一ID,不能修改
mz是控件名 ...
UG4L18——分支
UG4L18——分支
本章代码关键字
1UIPackage.branch //修改FGUI显示的分支
分支功能
分支功能用于实现项目的多态设计,例如多国语言版本下UI的差别,又例如多个渠道版本下UI的差别
FairyGUI中提供了分支方案,帮助我们快捷的解决这些问题
FGUI中分支的机制
分支的用途是对主干进行部分修改,我们都是首先在主干上开发,然后在项目的任何阶段,都可以建立任意多个分支
注意:它和代码仓库中的分支概念不一样。UI分支不包含主干的资源,它只放置与主干有差别的内容
这种机制不但作用于图片,也同样作用于组件和字体等所有类型资源
创建分支
文件——>项目设置——>项目分支——>点击加号创建分支(建议用英文名)
创建完成后,在工程文件夹下会多出一个 assets_分支名 的资源文件夹
菜单的工具栏可以进行分支切换
在这里切换分支
在工具栏切换到对应分支,然后在你想要创建的包上点击右键,选择创建分支
创建完成后,在 assets_分支名 文件夹中会多处一个包目录
观察文件夹后,你会发现分支机制的体现:UI分支不包含主干的资源 ...
UG4L17——DrawCall优化
UG4L17——DrawCall优化
本章代码关键字
12gComponent.fairyBatching //开启组件的深度调整以降低该面板的DrawCallgObject.InvalidateBatchingState() //手动触发深度调整,改变子元件及其子元件的位置、大小,旋转或缩放,并不会自动触发深度调整,因此需要手动触发
DrawCall
具体DrawCall是什么,参见:DrawCall
简单回顾DrawCall:
DC就是CPU通知GPU进行一次渲染的命令,如果DC次数较多会导致游戏卡顿
我们可以通过打图集,将小图合并成大图,将本应n次的DC变成1次DC来提高性能
FairyGUI 和 UGUI 以及 NGUI 的 DrawCall 优化异同
相同点:3种UI都是通过打图集来优化DC
不同点:
UGUI和NGUI的UI元素层级会影响DC的数量,我们拼UI时,要注意不同图集的UI元素的层级关系
FairyGUI中不用太过在意UI元素的层级,它会帮助我们进行深度调整
FairyGUI采用了Unity的动态批处理技术,提供了深度调 ...
UG4L16——插入模型、粒子、Canvas
UG4L16——插入模型、粒子、Canvas
本章代码关键字
1234GoWarpper //游戏对象包装器,通过该对象可以将某个Unity3D对象包装显示在一个空白图形上goWrapper.CacheRenderers() //更新包装对象的显示,当被GoWarpper包装的游戏对象变化时,需要调用该方法来更新其在UI上的显示goWrapper.wrapTarget //设置包装对象,可以更换显示的模型或者例子,更换时如果要释放旧对象,需要自己手动销毁goWrapper.SetWrapTarget() //设置包装对象,可以更换显示的模型或者例子,第二个参数可以设置是否复制材质,更换时如果要释放旧对象,需要自己手动销毁
UI中插入3D对象或者粒子
注意:这种方法的缺点是在UI摄像机下3D对象没有透视,如果想要有透视,可以使用Render Texture的方式
可以参考:UG3L15——模型和粒子显示在UI之前,Render Texture
创建3D对象
12//创建3D对象GameObject obj = Game ...
UG4L15——拖拽相关
UG4L15——拖拽相关
本章代码关键字
12345gObject.draggable //将对象的拖曳功能打开gObject.onDragStart.Add() //对象开始拖动监听事件gObject.onDragMove.Add() //对象拖动中监听事件gObject.onDragEnd.Add() //对象拖动结束监听事件gObject.dragBounds //限制对象的拖动范围
现有知识实现拖拽
利用onTouchBegin、onTouchEnd、onTouchMove事件可以完成拖拽功能
FGUI中的自由拖拽功能
获取对象设置 draggable 属性为 true 即可拖拽
注意:拖动只能在元件父组件内移动
123//显示面板TeachPanel panel = UIManager.Instance.ShowPanel<TeachPanel>("teach");panel.m_btnTest.draggable = true;
该元件即可拖曳至父对象下的如何地方 ...