FairyGUI个人使用手册 只有重点

Posted 酒九5

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FairyGUI个人使用手册 只有重点相关的知识,希望对你有一定的参考价值。

编辑器使用基础

FairyGUI的项目在文件系统的结构为:
assets:包内容放置目录。其中的package1:每个包一个目录,目录名就是包名。
assets_xx:分支内容放置的目录,xx就是分支名。多个分支则存在多个类似名称的目录。
settings:配置文件放置的目录。
.objs:内部数据目录。需要注意的时:不要加入版本管理中去,这里面的内容时不需要共享。
工程名.fairy:项目标识文件。文件名与项目名同名,可以随便修改。

主工具栏

其中注意一下发布和仅发布定义。
发布:默认的功能是发布当前活跃的那个包,(如果编辑器焦点在资源库,则活跃包是指资源库当前选中的资源所在的包;如果编辑器焦点在文档视图,则活跃包是指当前正在编辑的组件所在的包)。这个功能可以通过编号设置的选项改变为发布所有的包或者发布所有修改过但未发布的包。
仅发布定义:顾名思义,如果用户没有修改图片、动画、字体等素材,而只是改了哈界面布局,就可以只发布定义,也就不会重新生成纹理集。这样可以提升发布速度。但是当你的包内容不是很多的时候,这个提升并不明显。

弹出的窗口中需要注意的时候——每个文档使用单独的缩放比例:如果不勾选,所有文档共用缩放比例设置;如果勾选,则每个文档使用单独的缩放比例设置。举个例子,编辑文档A时,将文档缩放设置为80%,切换到编辑文档B,则缩放比例制动恢复到100%,在切回去,缩放比例又是80%了。

资源库

导入: 将图片、声音、动画、文字等素材从文件管理器/访达中拖动到资源库,完成资源的导入。也可以直接将素材放置到包目录里,然后点击刷新按钮。支持将另外项目的包直接拷入到assets目录。
移动 :资源可以在各个文件夹或者各个包之间随意拖动,不会破坏资源之间的引用关系。文件夹也可以拖动。
快速定位: 当焦点在库视图时,在键盘上连续按下字母,可以快速定位到当前目录下指定名称的资源。例如,连续按下abc,则定位到名称以“abc”开头的第一个资源;如果是中文字符,则只需按下拼音的第一个字母。例如,连续按下csb,则定位到名称以“测试包”开头的第一个资源。
重命名: 按下F2可修改资源名称。

工具栏

: 与编辑器连接。激活这个功能后,当活动文档发生切换时,会同时在库中选中活动文档对应的组件。

右键菜单

属性:修改资源的属性,对图片、动画这些资源,支持多选。对文件夹同样有效。
复制:复制选中资源。复制、粘贴功能支持跨项目。
移动至:将该资源移动到目标位置。
粘贴:粘贴复制的内容以及他们引用的未导出的资源到当前位置。
粘贴全部:粘贴已复制的内容以及他们引用的所有资源到当前位置。
更新资源:使用新的资源替换当前选定的资源。也可以在文件管理器/访达(MAC)中直接替换文件,后者适合批量操作。
设置为导出:设置资源为导出。包内的每个资源有一个是否导出的属性,已导出的资源的图标右下角有一个小红点。一个包只能使用其他包设置为已导出资源,而设置为不导出的资源时不可访问的。同时只有设置为导出的组件才可以使用代码动态创建。
在文件管理器(访达)中打开 在文件管理器(或访达)中定位选中的资源。注意,如果资源路径中含有空格,则可能定位失败。

显示列表

屏蔽关联系统。屏蔽后,当手动修改元件坐标和尺寸时,关联系统不会起作用。例如,A关联了B的位置,你想移动B向A靠近,但由于关联系统的作用,B和A的距离始终保持不变,所以很难完成操作。这时你可以屏蔽关联系统再操作。操作完成后,记得解除屏蔽。

时间轴

各个属性的时间轴。表示关键帧,表示两个关键帧之间使用插值动画,
红色小红旗则表示这个关键帧有Label,可以通过代码按名称访问。

引用

在资源库视图中,选中某个资源后,在右键菜单选择“依赖关系查询”,可以激活引用视图。
1.查询依赖我的资源 查询我依赖的资源 后者一般用于组件。
2.可以在此拖入需要操作的资源。
3.可以切换成替换模式。要先查询才能替换
4.查询结果列表。

舞台

常用的舞台操作有:
选定::点击一个元件单选,按住SHIFT点击多个元件多选。点击空白处取消所有选择。在空白处按下并拖动进行框选。
移动: 按住元件拖动,如果拖动时按住SHIFT,则移动限制在垂直方向或者水平方向。使用键盘上、下、左、右箭头键可以移动选定的元件,每按一次移动1像素,如果同时按下SHIFT键,则移动加速,每次移动10像素。
缩放 :拖拽选定框边缘的8个把柄,可以改变元件的宽度和高度。如果拖拽把柄的同时按住SHIFT键,则强制保持长宽比。
组合: 选定多个元件后,按CTRL+G建立一个组合。
右键菜单中的操作:
交换位置 :将选定的两个元件交换位置。
替换元件: 可以将当前选中的元件替换成另外一个元件,位置大小等所有属性都会保留。
转换为组件 :可以将当前选中的一个或多个元件替换成一个单独的组件,这个组件的内容包含选中的内容,选择的内容则被清除。
转换为位图: 可以将当前选中的一个或多个元件替换成一个单独的图片,这个图片的内容由选中的内容绘制而成,选择的内容则被清除。生成的图片自动加入资源库中。
在库中显示 :在库中高亮显示当前选中的元件。

项目设置

默认值

禁用字体渲染位置优化:这个选项只用在Egret和Laya版本。勾选后,FairyGUI将使用系统渲染文本的默认位置,不再进行自动的优化。这个差别这对于微软雅黑特别明显。这个选项可以帮助解决部分H5引擎渲染字体位置的问题。
垂直滚动条 水平滚动条 :设置制作UI时所有带滚动功能的容器需要使用的滚动条资源。这就是说,你将一个组件或者一个列表的“溢出处理”设置为“垂直滚动”、“水平滚动”或者“自由滚动”后,不需要每次设置滚动条,自动就会使用这里设置的滚动条资源。这个设置仅用于编辑器内,运行时使用UIConfig.horizontalScrollBar\\UIConfig.verticalScrollBar设定。
滚动条显示 滚动条的显示策略。这是全局设置,也可以在滚动容器属性里单独设置。 这个设置仅用于编辑器内,运行时使用UIConfig.defaultScrollBarDisplay设定。
按钮点击声音 设定按钮的默认点击声音。设置后,所有按钮点击都会播放这个声效,除非按钮自己独立设置另外的声效。该设置仅用于编辑器内,运行时用UIConfig.buttonSound设定。

快捷菜单


文字大小: 一个游戏使用的字体大小通常有几种固定的方案,这里定义好后,当任何地方需要输入字体大小时,就可以直接在下拉菜单选择。
字体: 一个游戏使用的字体通常有几种固定的方案,这里定义好后,当任何地方需要输入字体时,就可以直接在下拉菜单选择。
颜色: 一个游戏使用的颜色通常有几种方案,这里定义好后,当任何地方需要输入颜色时,就可以直接在下拉菜单选择。

适配测试


缩放模式:设置物理屏幕和逻辑屏幕的映射关系(物理分辨率是手机显示屏实际存在的分辨率,而逻辑分辨率是我们肉眼感知的实际尺寸)。

  • 根据屏幕大小缩放,按适配模式对物理屏幕进行缩放,得到逻辑屏幕。
  • 不缩放,物理和逻辑一致。

适配模式 设置计算全局缩放系数的方式。当缩放模式为“根据屏幕大小缩放”才有效。

  • 适应宽度和高度 取宽和高比例较小的进行缩放。例如,设计分辨率是960x640,设备分辨率是1280×720,那么可以得到宽边的比例是1280/960=1.33,高边的比例是720/640=1.125,最后取较小的1.125作为全局缩放系数。这种缩放方式保证内容缩放后始终在屏幕内,如果有留边,则留边部分可以通过关联系统进一步处理。
  • 适应宽度 固定取宽的比例进行缩放,高边可能会超出屏幕,这种方式需要设计师在设计时就有目的地设计安全区域。
  • 适应高度 固定取高的比例进行缩放。宽边可能会超出屏幕,这种方式需要设计师在设计时就有目的地设计安全区域

多国语言

刷新所有语言文件,这个刷新功能只对字符串进行增删,但不会做修改。这种机制保护已经翻译的内容在刷新时不会被冲掉。
举例说明:
项目内有一个组件C,它的内容是两个文本,分别是“t1:测试1,t2:测试2”,现在有一个语言文件en,它有两个字符串,分别对应了两个文本内容,并且它们已经被翻译成英文,内容为:“s1:test1,s2:test2”。观察以下操作对语言文件的影响:把t1的文本改成“测试2”,然后点击刷新。语言文件en不会有变化,s1的值依然是“test1”。把t1删掉,然后刷新所有语言文件。语言文件en里的s1会被删掉。增加一个“t3:测试3”,语言文件en的内容更新为“s1:test1,s2:test2,s3:测试3”。

自定义属性


用户自定义一些Key-Value集合:
1.在插件中可以利用。
2.控制器可以定义首页为这里的Key值,则组件创建时,控制器将自动切换到名称为Value的页面。
这里的设定仅用于编辑器内使用,运行时需要用代码重新设置,API是UIPackage.SetVar。

FairyGUI时以包为单位组织资源的。包里面每个资源都有是否导出的属性,可以自由设置,不可导出的资源是不可访问的。设置导出的资源可以用代码动态创建。
包里面有一个package.xml文件,是包的数据库文件。
包打出来了可以得到一个描述文件和一张或多张纹理集,不同平台的文件数量和打包方式有差别。
FairyGUI不处理包之间的依赖关系的,A包里面的元件A1使用了B包里面的原件B1,那你A1创建前,必须保证B包已经载入了。这个载入就要使用者手动调。

//查询包之间的依赖关系
    UIPackage pkg;
    var dependencies = pkg.dependencies;
    foreach(var kv in dependencies)
    
        Debug.Log(kv["id"]); //依赖包的id
        Debug.Log(kv["name"]); //依赖包的名称
    

划分包的原则是不要建立交叉的引用关系,避免A包使用B包资源,B包使用C包的资源这样的情况。一般就是建立一个或多个公共包,把基础和频繁资源放在里面,其他包要用就从公共包里面拖入就行。
在FairyGUI中,每一个资源都有一个URL地址。在资源右键菜单中就可以选择复制URL。我们在编辑器中还是在代码里,都可以通过这个URL引用资源。但是这个URL不可读,所以采用另外一种格式:ui//包名/资源名。前一种格式,不可读,但不受包或资源名重名影响。后一种格式:可读性较高,但有重名问题。

 //对象的URL地址
  Debug.Log(aObject.resourceURL);
  //对象在资源库中的名称
  Debug.Log(aObject.packageItem.name);
  //对象所在包的名称
  Debug.Log(aObject.packageItem.owner.name);
  //根据URL获得资源名称
  Debug.Log(UIPackage.GetItemByURL(resourceURL).name);

分支

分支用于实现项目的多态设计,比如多语言UI差别,多渠道版本UI差别。
分支的用途是对主干进行部分修改。用户都是首先在主干上开发的,然后在项目的任何阶段,都可以建立任意多个分支。分支中不包含主干的资源,它只放置与主干有差别的内容。这种机制不仅限于图片,同样作用与组件,字体等所有类型资源。
举个例子:你在分支下创建一个与主干下同名的一个组件,如Component1,这个时候它就和主干的同名组件产生了映射关系。我们切换到分支上直接打开主干的Component1会直接打开主干上该组件的内容,但是当我们通过一个拖入了Component1的新组件Component2去切换分支,就会发现会显示对应分支上的组件内容了。
当我们遇到在不同版本下界面元件需要微调的情况,如果通过建立一个组件分支,那每次界面要修改的时候,同步修改所有分支很麻烦。FairyGUI提供控制器首页与分支名称匹配的机制。切换分支不能直接导致控制器的改变,编辑器的分支切换实际上是重新启动了测试,也就是组件时重新创建的,所以控制器中的首页功能起到了作用。

基础属性


名称:元件名,允许重名。
位置:xy坐标位置。
尺寸:设置宽度和高度。
原大小:勾选之后恢复到素材原始大小。
保持比例:保证元件长宽比例不变。运行时没有效果,想在运行时实现该效果,可以把图片放入装载器,把装载器的填充处理设置为“适应高度”或“适应宽度”。
尺寸限制:缩放不能超过最大最小尺寸。
缩放:和宽高一样改变元件的显示大小。Scale是整体缩放,宽高是改变元件的包为大小。布局用宽高,做效果用Scale。关联系统只对元件的宽高有效,不计入Scale的影响。
倾斜:设置元件的倾斜值。Unity放心用。
轴心:轴心点。
同时作为锚点:元件的原点位置将设置为轴心所在的位置。
透明度:0透明,1不透明。
旋转:绕轴心旋转。
不可见:编辑模式下仍可见,运行不可见。
变灰:元件呈现一个灰度效果。对于组件除了整体变灰,还可以自定义效果。比如,通过在组件中定义一个名为“grayed”的控制器,由这个控制器去控制组件中具体哪个元件变灰,有这个东西默认的整体变灰效果就消失了。
不可触摸:不交互。图片,文本,动画永不可触摸。想对他们监听OnCick事件,转为使用组件,或者富文本,装载器。

效果属性

BlendMode:提供一些混合选项设置。Unity中除组件外放心修改。Unity的Blend效果与编辑器中的预览可能会有差别。开发者可以通过使用以下代码重定义混合效果。注意:设置了特别BlendMode的显示对象无法与其他显示对象合并Draw Call。

 BlendModeUtils.Override(BlendMode.Add,
      UnityEngine.Rendering.BlendMode.XX,
       UnityEngine.Rendering.BlendMode.XX);

滤镜:目前支持两种,颜色滤镜和模糊滤镜。Unity中图片、动画、装载器几乎没有额外消耗。注意:设置了滤镜的显示对象无法与其他显示对象合并Draw Call。

其他


Tooltips:当鼠标移到元件范围内时,弹出一个文本提示,移出元件范围后,文本提示自动消失。使用Tooltips要按照下面几个步骤准备:

  • 制作一个组件,这个组件的“扩展”属性需要定义为“标签”,以便系统将TIPS文本设置到标签的“标题”属性中。
  • 打开编辑器主菜单“文件->项目设置”,然后在弹出的对话框里选择“默认值”,右边面板会出现一个“TIPS组件”的设置,将你制作好的标签组件拖入。
  • 完成上面两步后编辑器就可以正常使用Tooltips预览。但运行时需要使用代码再次设置:
UIConfig.tooltipsWin = "ui://包名/组件名";

自定义数据:可以设置一个自定义的数据,这个数据FairyGUI不做解析,按原样发布到最后的描述文件中。开发者可以在运行时获取。获取方式是:GObject.data或GObject.userData(Cocos2dx、Vision)。注意区分这里的设置和组件属性里的设置,他们获取的方式不一样。

图片

图片设置窗口

图像大小:图片尺寸,像素大小。如果是SVG格式,这里可以手动改大小,该格式可以无损缩放的。
数据大小:图片文件的大小,单位是字节。
使用九宫格进行缩放:九宫格绘制会遵循下面的规则:

  • 保持4个角部分不变形
  • 单向拉伸4条边(即在4个角两两之间的边,比如上边,只做横向拉伸)
  • 双向拉伸中间部分(即九宫格的中间部分,横向,纵向同时拉伸,PS:拉伸比例不一定相同)

    如果你想九宫格中被拉伸的部分改用平铺进行填充,可以在下图的界面内勾选"平铺部分宫格”后,再勾选需要平铺的宫格:(这个功能只有Unity等部分平台支持)
    使用平铺进行缩放:图片拉伸时使用平铺模式进行填充。用较小图片平铺填充到大面积会产生大量网格,可能溢出报错。如果你真要这么做,Unity版本提供了一种优化策略,你需要将这个图片设置为单独导出,然后在Unity编辑器中,将这张纹理的Wrap Mode设置为Repeat。
    允许平滑:进行平滑处理,像素游戏关了,一般都开。
    质量:Unity不适用。
    纹理集: 一个包可以包含一张或多张纹理集,每个图片都可以安排放置到不同的纹理集。
  • 单独 表示这个图片单独放置到一张纹理集,且纹理集的尺寸是2的幂。
  • 单独(NPOT) 表示这张图片按原大小直接输出。
  • 单独(4的倍数) 表示这个图片单独放置到一张纹理集,且纹理集的尺寸是4的倍数。
    重复边缘像素:避免拼接或者平铺时产生缝隙。
    禁用裁剪边缘空白:优化图集使用率,但是需要特别操作比如90度填充的,跳过这个选项。

高清资源选择

准备对应的放大系数图片,在发布设置里面有在发布设置对话框里,我们提供了@2x,@3x,@4x的选项,勾选后,如果存在与资源同名且带@2x、@3x、@4x后缀的资源,则发布时会一并打包。运行时自动选用合适的资源。

实例属性

颜色:变色。
亮度:实际通过修改颜色,明暗。
翻转:水平或垂直翻转。与设置Scale=-1不同,不涉及矩阵,不受轴心,坐标。
填充方法:和UGUI差不多。

动画

创建动画

1.用动画工具制作好,导出带plist或eas扩展名的描述文件以及相关的贴图(应放置在相同目录),然后将描述文件(仅描述文件)拖入即可。
2.新建动画。
3.直接拖入一个GIF文件。
无论用啥子方式创建的动画,在编辑器里面,都是以一个单一文件存在(.jta)。也就是说,无论动画是从库里的图片文件创建的,还是从外面导进来的,都不会再有对单个图片的依赖。

编辑动画

帧频:根据动画设顶修改。
播放间隔:每隔多少帧播一张图。增大或减少可以降低或增加播放速度。
循环延迟:播完了停多少帧再重播。
摆动式播放:先从头播到尾,再从尾播到头。
纹理集:发布到自定的纹理集。动画不支持纹理分页,也就是说,当纹理设置了自动分页时,如果动画被分布到不同的纹理集页面,运行时就会出现显示错误。这时你可以安排动画放置到单独的纹理集,或者和其他动画放在同一个纹理集上。
允许平滑:是否进行平滑处理。像素游戏关掉。不适用与Unity。
导入图片序列:从序列图片中更新动画。
导入Sprite表:动画工具导出的动画文件。
导出图片序列:动画导出为图片序列。

实例属性

帧:设置当前帧。
播放:是否处于播放状态。
颜色:修改动画颜色。
亮度:明暗。

图形

实例属性

图形:可以选择形状,特别注意的是“无”表示的这是一个空的图像,其不消耗任何显示资源,通常就是一个占位的作用。还有就是这种图形和全透明的图形不一样,后者能阻挡点击。
线条粗细:图形描边大小,0不描边。
线条颜色:字面意思。
填充颜色:字面意思。
圆角:一个整数或者4个独好分割的整数。如“4”,表示矩形的四个角均为半径为4的圆角。例如“2,1,1,4”就是指定了每个角的半径。
边数:表示正多边形的边数。
旋转:设置一个正多边形的旋转角度。

编辑多边形

图形编辑操作:
1.拖动圆点调整顶点位置。
2.左键点击顶点,可以直接在检查器改变点的坐标数值。
3.右键增删顶点。
4.锁定形状之后,改变顶点位置,其他顶点同时改变位置,整体移动
如果图形是正多边形,则顶点位置只能沿着轴线移动

占位

空白图形可以当一个占位用,运行中可能用其他对象替换这个空白图形。FGUI的显示对象与原生显示对象混合使用时就要用到空白图形。
举个例子:当你需要在UI中放置一个原生的对象aSprite,则你可以在适当位置放个空白图形(holder),那你代码写:

//将aSprite放到holder位置上。
holder.SetNativeObject(aSprite);

通过此方法,任何原生显示对象都可以轻松插入到FGUI的显示列表中。如果此函数重复调用,前一个对象被销毁,插入新的对象。

装载器


URL:通过URL码指向资源。选中右侧图标,打包发布时会自动清空这里设置的值。
自动大小:是否根据内容大小自动调整自身大小。
填充处理:当要显示的图片或动画与装载器大小不同时用的缩放策略。

  • 无:无任何缩放。
  • 等比缩放(显示全部):按照最小比率缩放,不变形,一边可能留空白。
  • 等比缩放(无边框):按照最大比率缩放,不变形,一边可能超出装载器矩形范围。
  • 等比缩放(适应高度):内容高度占满装载器高度,宽度等比缩放。
  • 等比缩放(适应高度):内容宽度占满装载器宽度,高度等比缩放。
  • 自由缩放:内容缩放至占满装载器矩形范围,不保持比例。
    需要注意的:填充处理只在当装载器大小与内容大小不一致起作用,所以选了自动大小这个就没用了。而且装载器没有剪裁功能,如果有这个需求,要把装载器放入一个溢出隐藏的组件。
    仅允许缩小:填充处理时,内容永不放大。
    对齐:字面意思。
    帧:动画设置当前帧。
    播放:动画设置播放还是停止。
    颜色:字面意思。
    亮度:字面意思。
    填充方法:看图片章节。

相关的API

GObject

设置坐标: SetXY、SetPosition或者单独设置x、y。
设置大小 :SetSize或者单独设置width、height。SetSize还可以带第三个参数:

 //忽略轴心的影响,即在设置了轴心的情况下,
 //改变大小也不会同时改变坐标。
   aObject.SetSize(100,100,true);

设置大小限制 :minWidth、maxWidth、minHeight、maxHeight。
设置Scale: SetScale或者单独设置scaleX、scaleY。
设置轴心 :SetPivot或者单独设置pivotX、pivotY

  aObject.SetPivot(0.5f, 0.5f); //设置轴心
  aObject.SetPivot(0.5f, 0.5f, true); //设置轴心,并同时作为锚点

设置可见 :visible = true/false。注意:即使对象设置visible=false,它仍然在显示列表中,所以仍然会消耗一定的计算资源(但不会消耗渲染资源),所以如果是长期的隐藏,建议移出显示列表,即RemoveFromParent。另外,不要和显示控制器混淆,两者是独立的。即使对象的visible=true,如果不在显示控制器的指定页面里,对象仍然是不可见的。
设置交互 :touchable = true/false。
设置变灰 :grayed = true/false。
设置激活 :enabled = true/false。 元件的激活状态其实是由变灰+不可触摸共同组成。

//等同于调用GObject.grayed = true + GObject.touchable = false
  aObject.enabled = false; 

设置旋转 :rotation。Unity版本还支持rotationX和rotationY。2D UI由正交相机渲染,设置rotationX或rotationY可以有旋转效果,但无透视效果。FairyGUI提供了透视模拟的功能。例如

 //设置对象实用透视模拟
  aObject.displayObject.perspective = true;
  //可以设置相机距离
  aObject.displayObject.focalLength = 2000;
 //此时旋转X轴或Y轴可以有透视效果。
  aObject.rotaionX = 30;

获得原生对象 displayObject。例如:

 //获取原生对象
  DisplayObject displayObject = aObject.displayObject;
  //Unity版本获取GameObject
  GameObject go = displayObject.gameObject;

销毁: Dispose。销毁对象,当对象不再使用可以调用它,且必须调用。注意:纹理、声音等这些公共资源是由UIPackage管理的,销毁对象不会回收这些资源。如果要回收这些资源,应该使用UIPackage.RemovePackage。
resourceURL: 对象在资源库中的URL地址。只有图片、动画、组件这些有链接资源的对象才能获得这个URL值。可以用这个URL比较两个组件对象是不是由同一个组件资源构建的。URL是内部编码格式,不可读,如果要获得资源名称,可以使用下面的方法:

  //对象在资源库中的名称
  Debug.Log(aObject.packageItem.name);
  //根据URL获得资源名称
  Debug.Log(UIPackage.GetItemByURL(resourceURL).name);

onStage :获取对象是否在舞台上。对象是否在舞台上受多种因素影响,例如对象是否在显示列表中,是否被显示控制器隐藏,是否被组的显示控制隐藏等。

GImage

实例化图片:

GImage aImage = UIPackage.CreateObject("包名","图片名").asImage;

填充比列设置:

 aImage.fillAmount = 0.5; //0~1

Unity中将纹理赋给GImage:

    //必须注意GImage不管理外部对象的生命周期,不会主动销毁your_Texture2D
    aImage.texture = new NTexture(your_Texture2D);

设置材质和着色器:

    aImage.shader = yourShader; 
    //或者
    aImage.material = yourMaterial;

GMovieClip

实例化:

GMovieClip aMovie = UIPackage.CreateObject("包名","动画名").asMovieClip;

播放状态控制,停止状态停在第几帧:

    aMovie.playing = false; //切换播放和停止状态
    aMovie.frame = 5; //如果动画处于停止状态,可以设置停止在第几帧

循环播放从第几帧播到第几帧,循环几次:

aMovie.SetPlaySettings(0, -1, 0, -1); 

动画播放过程控制:

    //返回播放头部
    ((MovieClip)aMovie.displayObject).Rewind();

动画播完了可以获取一个回调通知(循环播放,循环结束才有):

 aMovie.onPlayEnd.Add(...);

GGraph

动态创建图形(一定要设置图形的大小,否则显示不出来) 如:

    GGraph holder = new GGraph();
    holder.SetSize(100, 100);
    holder.DrawRect(...);
    aComponent.AddChild(holder);

APIdistances控制各个顶点的幅度。这是个浮点类型的数组,数组大小应该和顶点数量相等,每一个元素取值范围是0-1。
Unity中使用GGraph:

    //传入多边形的各个顶点绘制多边形,注意点必须是顺时针方向传入!!
    aGraph.shape.DrawPolygon(new Vector2[]  ... , new Color[]  ... 
    //绘制一个渐变色的矩形
    aGraph.shape.DrawRect(0, new Color[]  ... );

GLoader

动态创建装载器:

    GLoader aLoader = new GLoader();
    aLoader.SetSize(100,100);
    aLoader.url = "ui://包名/图片名";

载入和显示不在UI包里的资源,从AB包中获取资源,或需要整一个缓存机制(解决重复加载的性能开销问题),或要控制素材生命周期(GLader不会销毁外部载入的资源),那就需要自己扩展Gloader。大体步骤如下:
1.

 class MyGLoader  : GLoader
  
      override protected function LoadExternal()
      
          /*
          开始外部载入,地址在url属性
          载入完成后调用OnExternalLoadSuccess
          载入失败调用OnExternalLoadFailed

          注意:如果是外部载入,在载入结束后,调用OnExternalLoadSuccess或OnExternalLoadFailed前,
          比较严谨的做法是先检查url属性是否已经和这个载入的内容不相符。
          如果不相符,表示loader已经被修改了。
          这种情况下应该放弃调用OnExternalLoadSuccess或OnExternalLoadFailed。
          */
      

      override protected function FreeExternal(NTexture texture)
      
          //释放外部载入的资源
      
  

2.注册我们要使用的Loader类。注册完成后,游戏中所有装载器都由MyGLoader实例化产生。

UIObjectFactory.SetLoaderExtension(typeof(MyGLoader));

unity中把纹理赋给GLoader的例子:

 //必须注意GLoader不管理外部对象的生命周期,不会主动销毁your_Texture2D
  aLoader.texture = new NTexture(your_Texture2D);

FairyGUI TextField

记录一个在使用FairyGUI的TextField时遇到的坑。

TextField有一个文本模板功能,可以实现类似占位符的功能,如:{ number = 0 },然后我们可以在脚本中修改number的值:textField.SetVar("number", "1").FlushVars();。运行时我们会发现,我们可以成功获取UI下的TextField,但修改操作却无法生效,实在让人费解。

接下来就是漫长的源码测试环节。

public GTextField SetVar(string name, string value)
{
    if (_templateVars == null)
        _templateVars = new Dictionary<string, string>();
    _templateVars[name] = value;
    return this;
}

首先是SetVar(),这个只是修改模板信息,通过Log输出后排除。那么问题只能是在FlushVars(),也就是刷新文本上。

public void FlushVars()
{
    SetTextFieldText();
    UpdateSize();
}

virtual protected void SetTextFieldText()
{
    string str = _text;
    if (_templateVars != null)
        str = ParseTemplate(str);
    _textField.maxWidth = maxWidth;
    if (_ubbEnabled)
        _textField.htmlText = UBBParser.inst.Parse(XMLUtils.EncodeString(str));
    else
        _textField.text = str;
}

观察上面的代码可以发现,文本的转换发生在ParseTemplate(),问题极有可能是出在这上面,翻看源码,ParseTemplate()其实是一个暴力的字符串处理方法,首先找出所有配对的{},然后获取_templateVars中的key/value对,去逐个匹配文本中的模板,下面是关键的key/value获取部分代码。

tag = template.Substring(pos1 + 1, pos2 - pos1 - 1);
pos3 = tag.IndexOf('=');
if (pos3 != -1)
{
    if (!_templateVars.TryGetValue(tag.Substring(0, pos3), out value))
        value = tag.Substring(pos3 + 1);
}
else
{
    if (!_templateVars.TryGetValue(tag, out value))
        value = "";
}

可以看出,这个key和value匹配是很严格的,不允许出现任何冗余字符,包括空格,或者说,这是一个纯字符串的匹配(可以说是很臭了,空格产生美都不允许)。在我们把模板内的所有空格去掉后,脚本就可以控制number的值了。

以上是关于FairyGUI个人使用手册 只有重点的主要内容,如果未能解决你的问题,请参考以下文章

持续更新uni-app学习笔记

前端开发手册

持续更新uni-app学习笔记

Vue 前端uni-app多环境配置部署服务器的问题

疑似支付宝前端团队内部入门手册公开?

决战秋招的前端面试,前端大厂面试手册必不可少