44.分支

44.FGUI进阶-分支


44.1 知识点

分支功能是什么

  • 分支功能用于实现项目的多态设计
  • 例如多国语言版本下UI的差别
  • 又例如多个渠道版本下UI的差别

FairyGUI中提供了分支方案,帮助我们快捷的解决这些问题

FGUI中分支的机制

  • 分支的用途是对主干进行部分修改
  • 我们都是首先在主干上开发,然后在项目的任何阶段,都可以建立任意多个分支
  • 注意:它和代码仓库中的分支概念不一样。UI分支不包含主干的资源,它只放置与主干有差别的内容

这种机制不但作用于图片,也同样作用于组件和字体等所有类型资源

创建分支

文件——>项目设置——>项目分支——>点击加号创建分支(建议用英文名)。创建完成后,在工程文件夹下会多出一个 assets_分支名 的资源文件夹。菜单的工具栏可以进行分支切换。


在工具栏切换到对应分支,然后在你想要创建的包上点击右键,选择创建分支。创建完成后,在 assets_分支名 文件夹中会多出一个包目录。观察文件夹后,你会发现分支机制的体现:UI分支不包含主干的资源,它只放置与主干有差别的内容。

分支资源映射

  • 分支包中可以随意存放资源,没有任何限制,你可以像之前一样进行操作。
  • 根据分支机制,只要分支和主干的资源路径和名称完全一致,它们就会自动建立一个映射关系。
  • 同路径同名的资源会自动建立映射关系,但需要确保文件路径和文件名完全一致。
  • 同路径同名的组件也会自动建立映射关系,但是组件本身不会相互切换,只有当在其他组件中使用映射组件时才会有效果。比如在分支相同路径下也创建一个TeachPanel,在Test组件中使用。切换分支时或切换显示。


  • 如果删除了分支中映射的资源,系统会自动切换回主干资源。
  • 注意,主干和分支之间的关系是弱连接的。只有当存在映射关系时,分支起作用;如果不存在映射关系,不会影响主干的内容。

分支和控制器配合

  • 组件分支在使用上相对较为麻烦,因为每次需要修改界面时,同步修改所有分支的组件会比较繁琐。针对分支界面的小差异,我们可以利用控制器中的”首页与分支名称匹配”的功能来进行调整。
  • 具体操作如下:
    • 为一个组件添加一个控制器。
    • 将控制器的首页设置为”匹配分支名称”。
    • 在对应的索引页面中填写对应的分支名称。

这样做可以根据不同的分支名称来加载对应的界面,避免了同时修改所有分支组件的繁琐过程。通过控制器的设置,可以更加方便地进行分支界面的调整。

发布分支

主干包含所有分支

发布结果包含主干和所有分支的内容,并将发布的内容放置在“发布路径”而非“分支发布路径”。使用这种处理方式可以在运行时决定切换到哪个分支。例如,主干和分支en都有一个face.png,那么发布结果将包含两个face.png。活跃分支的设置决定了实际显示哪个图片。这种模式适用于游戏中只有部分面板针对不同平台显示不同,而其他内容都相同的情况。

主干合并活跃分支

发布结果包含主干和当前活跃分支合并后的内容。无论当前分支是什么,发布结果首先都包含所有主干的内容。然后根据分支映射关系,用分支的资源代替主干的资源。当主工具栏上的分支设置为主干时,发布的结果放置在“发布路径”,当设置为某个分支时,发布的结果放置在“分支发布路径/分支名称”。例如,主干有一个face.png,分支en也有一个face.png。如果主工具栏上的分支设置为主干,发布的结果放置在“发布路径”,其中的face.png是主干的;如果设置为分支en,发布的结果放置在“分支发布路径/en”,其中的face.png是分支en的。这种方式适用于多工程对应不同UI资源的情况,例如多语言版本中几乎所有界面都需要变化,因此需要进行良好的分工程处理。可以把不同分支的资源发布到不同的Unity工程中。

每个分支使用独立的纹理集

这样每个分支必定会有自己的纹理集,占的内存的空间更大。建议分支和主干间差距很大的时候使用。

Unity中的使用

//设置分支
//通过UIPackage.branch设置分支
UIPackage.branch = "Test";

//注意:设置分支一定是在创建UI之前
UIManager.Instance.ShowPanel<TeachPanel>("Teach");

44.2 知识点代码

using FairyGUI;
using System.Collections;
using System.Collections.Generic;
using Teach;
using UnityEngine;

public class Lesson44_FGUI进阶_分支 : MonoBehaviour
{
    void Start()
    {
        #region 知识点一 分支功能是什么?
        //分支功能用于实现项目的多态设计
        //例如多国语言版本下UI的差别
        //又例如多个渠道版本下UI的差别

        //FairyGUI中提供了分支方案,帮助我们快捷的解决这些问题
        #endregion

        #region 知识点二 FGUI中分支的机制

        //分支的用途是对主干进行部分修改
        //我们都是首先在主干上开发,然后在项目的任何阶段,都可以建立任意多个分支
        //注意:它和代码仓库中的分支概念不一样。UI分支不包含主干的资源,它只放置与主干有差别的内容

        //这种机制不但作用于图片
        //也同样作用于组件和字体等所有类型资源

        #endregion

        #region 知识点三 创建分支

        //1.文件——>项目设置——>项目分支——>点击加号创建分支(建议用英文名)
        //      创建完成后,在工程文件夹下会多出一个 assets_分支名 的资源文件夹
        //      菜单的工具栏可以进行分支切换

        //2.在工具栏切换到对应分支,然后在你想要创建的包上点击右键,选择创建分支
        //      创建完成后,在assets_分支名文件夹中会多处一个包目录
        //      观察文件夹后,你会发现分支机制的体现:UI分支不包含主干的资源,它只放置与主干有差别的内容

        #endregion

        #region 知识点四 分支资源映射
        //你可以随意的像之前一样往分支包中放入资源或者复制粘贴资源,没有任何限制

        //按照分支的机制,分支和主干的资源只要路径和名称完全一致,他们就会自动建立一个映射关系

        //1.同路径同名资源的自动映射关系(注意:文件路径和文件名一定要一致)
        //2.同路径同名组件的自动隐射关系(注意:组件本身不会相互切换,只有当在其他组件中使用隐射组件时才会有效果)
        //3.删除分支隐射资源后,会自动切换回主干资源
        //(注意:主干和分支的关系是弱连接,如果这种连接关系存在,则分支起作用;如果不存在,是不会影响主干的内容的)
        #endregion

        #region 知识点五 分支和控制器配合
        //组件分支在使用上相对比较麻烦,比如每次界面需要修改时,同步修改所有分支组件会比较麻烦
        //对于分支界面的小差异,我们可以利用控制器中的 首页与分支名称匹配的功能 进行分支界面调整

        //1.为一个组件添加一个控制器
        //2.控制器首页设置为:匹配分支名称
        //3.在对应索引页面填写分支名称
        #endregion

        #region 知识点六 发布分支

        //1.主干包含所有分支
        //发布结果包含主干以及所有分支的内容
        //发布的内容放置在“发布路径”,而非“分支发布路径”
        //使用这种处理方式,可以在运行时再决定切换到哪个分支

        //例如主干有一个face.png
        //分支en也有一个face.png
        //那么发布结果就含有两个face.png
        //运行时实际显示哪个图片,由代码设置的活跃分支名称决定

        //一般不想分工程时可以选择这种模式
        //适用于 游戏只有部分面板针对不同平台显示不同,其它都一样

        //2.主干合并活跃分支 
        //发布结果包含主干合并当前活跃分支后的内容
        //也就是说,无论当前分支是什么,发布结果首先都包含所有主干的内容
        //然后查看哪些资源有分支映射关系的,就用分支的代替主干的
        //当主工具栏上分支的设置为主干时,发布出来的结果放置在“发布路径”
        //当设置为某个分支时,发布出来的结果放置在“分支发布路径/分支名称”。

        //例如主干有一个face.png,分支en也有一个face.png
        //如果主工具栏上分支的设置为主干,那么发布出来的结果放置在“发布路径”
        //包里的face.png是主干的face.png
        //如果主工具栏上分支的设置为en,那么发布出来的结果放置在“分支发布路径 / en”
        //包里的face.png是分支en里的face.png。

        //这种比较适用于多工程对应不同UI资源
        //适用于 多语言版本,几乎所有界面都要变化,那么肯定得分工程处理较好

        #endregion

        #region 知识点七 Unity中的使用

        //设置分支
        //通过UIPackage.branch设置分支
        UIPackage.branch = "Test";

        //注意:设置分支一定是在创建UI之前
        UIManager.Instance.ShowPanel<TeachPanel>("Teach");

        #endregion
    }
}

44.3 练习题

在上节课的练习题基础上,加入一个分支,让练习题面板在不同分支中布局不一样,并且让其中一张图片不一样

创建练习题分支


分支相同路径下创建同名图片资源

在练习题面板创建分支匹配控制器,面板中某些元件根据次分支控制器调整位置

设置好发布路径发布

Unity中代码设置分支

//设置分支
UIPackage.branch = "Exercises";


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏