FairyGUI加载包生成物体的过程解析

8 篇文章 0 订阅
4 篇文章 1 订阅

这两天在看FairyGUI的工作流程,在加载FairyGUI某个组件的时候需要先AddPackage,然后在CreateObject,这时才能正确加载组件。

要了解FairyGUI加载包生成UI的过程,要先了解FairyGUI编辑器生成包的格式。在FairyGUI编辑器里面发布包之后会生成三个重要的文件,一个是.bytes文件,一个是.png文件,一个是*.sprites.bytes文件。这三个文件也是需要拷贝到Unity的三个文件,第一个文件是描述包结构的文件,第二个是atlas文件,第三个是描述atlas的文件。FariyGUI主要是依靠解析第一个文件来生成基本的UI。打开该文件能看到一些是一些标记与标签的集合。乍一看以为是XML文件,其实不是,是类似XML的文件,FairyGUI自己实现了一个字符串解析工具来解析该文件的内容。大概可以分为以下几个步骤:

1.UIPackage.AddPackage方法会先找到对应的包名,找到packageDescription标签,并且找到该标签节点下面的resource列表,然后根据resource列表进行逐个加载,加载atlas,image,component等,这里要注意的是FairyGUI会把resource列表里的所有image全部加载,component只加载component data.

2.UIPackage.CreateObject会通过参数提供的包名和资源名去实例化对象。具体过程是这样的:

  • 在resource列表里面找到资源名匹配的名字,如果资源是image则直接实例化出来,如果不是则进行下一步。
  • 找到刚刚匹配名字对应的id,通过id找到对应的xml配置,初始化控制器,初始化displayList里面的element.最终每个资源都会在resource里面找到,否则会出现某element加载不出来的问题。需要注意的是,在resource里面找资源名的时候,如果是component的话,则需要获取到id,通过id找到对应的xml配置,然后在遍历displayList里面的元素的时候,找的是src,通过src找到最终的资源。然后根据其他配置信息初始化位置信息,大小信息等。

在实例化的过程中涉及到FairyGUI的基础组件构造,简单画了一个UML图方便理解各个基础组件之间的关系,如下图:

FairyGUI组件关系UML图

如图可以看出GObject是所有组件的基类,它定义了组件的组件的基础信息,比如位置,缩放等,继承于它的组件各自实现自身特有的功能。GRoot是生成的资源的父节点,用来管理生成的所有的资源的整体行为,它站在资源的上层。

上面这个图有一个很重要的点没有说,比如组件GImage引用了Image, 而Image引用了NGraphics,NGraphics生成了网格和自动添加了Material,这样组件就显示出来了。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在FairyGUI中创建下拉框(ComboBox)时,可以按照以下步骤进行操作: 1. 打开FairyGUI编辑器,并创建一个新的UI页面。 2. 在编辑器的资源列表中,选择一个下拉框组件(ComboBox)并将其拖放到舞台上。 3. 在属性检查器中,可以设置下拉框的大小、位置、默认选项等属性。 4. 右键点击下拉框组件,在弹出的菜单中选择"Edit Items"(编辑项)。 5. 在编辑项界面中,可以添加、删除和编辑下拉框的选项。每个选项由一个文本和一个值组成。你可以设置显示在下拉框中的文本以及对应的值。 6. 在代码中,你可以使用FairyGUI提供的API来操作下拉框。例如,你可以通过`GComboBox`类来获取下拉框实例,并使用`items`属性来设置选项列表,使用`selectedIndex`属性来设置默认选中的索引,使用`value`属性来获取或设置当前选中项的值等。 以下是一个简单的示例代码,展示了如何在FairyGUI中创建和操作下拉框: ```lua local comboBox = UIPackage.CreateObject("名", "下拉框名") -- 根据实际情况替换"名"和"下拉框名" comboBox:SetSize(200, 30) comboBox.items = {"选项1", "选项2", "选项3"} comboBox.selectedIndex = 0 comboBox.value = "选项1" comboBox.onChanged:Add(function(context) print("当前选中的值:" .. comboBox.value) end) ``` 在上面的示例中,我们创建了一个名为`comboBox`的下拉框实例。我们设置了三个选项,并将第一个选项作为默认选中项。当选中项发生变化时,会触发`onChanged`事件,并打印当前选中的值。 请注意,上述示例代码是基于Lua语言的FairyGUI API,如果你在其他语言上使用FairyGUI,代码会有所不同。你需要根据具体的开发环境和语言选择相应的API和语法。 希望能对你有所帮助!如果还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值