Skip to content

编辑器发布设置

本文只记录 FairyGUI 编辑器侧真实存在的发布属性与设置文件结构,作为发布相关功能开发时的依据。本文只按编辑器真实属性组织内容。

设置文件与层级

编辑器发布设置至少分为两层:

层级编辑器对象作用
全局发布设置GlobalPublishSettings记录项目级默认发布参数,序列化到 settings/Publish.json
包级发布设置PublishSettings记录单个包的发布参数、图集列表和排除列表

settings/Publish.json 真实属性

顶层属性

以下是 GlobalPublishSettings 中可见的真实发布属性:

属性含义
path发布输出目录
branchPath分支发布路径
fileExtension发布文件扩展名
packageCount默认包数量
compressDesc是否压缩描述数据
binaryFormat是否使用二进制发布格式
jpegQualityJPEG 质量
compressPNG是否压缩 PNG
allowGenCode是否允许生成代码
codePath代码输出路径
classNamePrefix类名前缀
memberNamePrefix成员名前缀
packageName代码生成使用的包名
ignoreNoname是否忽略无名对象
getMemberByName是否按名称获取成员
codeType代码生成类型
includeHighResolution高分辨率资源包含位掩码
branchProcessing分支处理模式
atlasMaxSize图集最大尺寸
atlasPaging是否分页
atlasSizeOption图集尺寸策略
atlasForceSquare是否强制正方形
atlasAllowRotation是否允许旋转
atlasTrimImage是否裁边

codeGeneration

Publish.json 中的代码生成子对象包含以下真实属性:

属性含义
allowGenCode是否允许生成代码
codePath代码输出路径
classNamePrefix类名前缀
memberNamePrefix成员名前缀
packageName目标包名 / 命名空间
ignoreNoname是否忽略无名对象
getMemberByName是否生成按名称获取成员逻辑
codeType代码类型

atlasSetting

Publish.json 中的图集子对象包含以下真实属性:

属性含义
maxSize图集最大尺寸
paging是否允许多页图集
sizeOption图集尺寸策略
forceSquare是否强制方图
allowRotation是否允许旋转
trimImage是否裁边

说明:

  • 编辑器 GlobalPublishSettings 里还存在 atlasMaxSizeatlasPagingatlasSizeOptionatlasForceSquareatlasAllowRotationatlasTrimImage 这些运行时字段,它们对应 Publish.json 里的 atlasSetting 子对象。
  • extractAlpha 不属于全局 Publish.json 的真实属性;它在包级图集设置里出现。

SVG 图像发布

package.xmlimage 资源指向 .svg,并声明了正的 widthheight 时,发布会先按这两个声明尺寸栅格化,再执行可选裁边和图集合成。发布物只包含 PNG 图集;sprite 的原始尺寸保持为工程声明值。

包级发布设置真实属性

PublishSettings 代表单个包的发布设置,真实属性如下:

属性含义
path包级发布路径
fileName发布文件名
branchPath包级分支路径
packageCount包级输出数量
genCode是否为该包生成代码
codePath该包代码输出路径
useGlobalAtlasSettings是否使用全局图集设置
atlasList包级图集设置列表
excludedList发布排除列表

说明:

  • PublishSettings 不是 settings/Publish.json 的顶层结构,而是单个包发布配置对象。
  • 包级设置里可以单独定义图集列表,也可以指定使用全局图集设置。
  • 工程 package.xml 中的 publish 节点当前正式支持 namepathbranchPathpackageCountgenCodecodePath,以及包级图集子节点 <atlas name="Default" index="0"/>
  • 工程 package.xmlpackageDescription 根节点当前正式支持 compressPNGjpegQuality 与派生的 hasFavorites;未设置的图片压缩选项保持省略,hasFavorites 仅在包内存在收藏资源时写为 true

工程资源收藏元数据

package.xmlpackage_branch.xml 的 component/asset 资源节点使用 favorite="true" 记录收藏状态;未收藏时省略该属性。主 package.xmlpackageDescription@hasFavorites 由包内所有已建模资源的收藏状态派生,不作为独立可编辑状态。

UAM 通过 resource.favorite 承载该字段,公开事务使用幂等的 setResourceFavorite 设置目标布尔值。收藏状态只影响编辑器工程数据,不进入运行时二进制发布协议。当前工程资源模型不包含 package folder 项,因此文件夹收藏不在这一正式范围内。

工程图片资源属性

package.xmlpackage_branch.xmlimage 资源属性由 UAM resource.image 完整快照承载,包括纹理集模式、质量选项与自定义质量、平滑、边缘复制、缩放模式、九宫格和 tile-grid 位掩码。公开事务 setImageResourceProps 只替换这份正式属性快照,不修改图片 source bytes;非图片 selector、不完整快照、非法缩放模式、九宫格或位掩码会在写回前被拒绝。

当前发布输出路径解析

发布时显式传入的输出目录优先于设置文件。未传入时,当前选择顺序如下:

  1. 活跃分支发布的包级 branchPath,再到全局 branchPath
  2. 包级 path
  3. 全局 path

选中的相对路径以工程根目录为基准;若以上都未配置,发布不会隐式选择输出目录。

当前发布完整性要求

这些要求是 OpenFairyGUI 当前发布执行时的能力边界,不是新增的编辑器设置字段:

条件当前行为
已解析到发布输出目录必须提供输出文件系统;缺失时不会把流程当作发布成功
有需要封包的图像或动画帧必须提供 raster encoder、源资源路径和 atlas 输出目录
图集装箱、图像读取或合成失败中止发布,不生成带透明空洞或缺页的成功结果
SoundResourceMiscResourceSpineResourceDragonBonesResource 及其依赖复制失败中止发布,不把缺失的 runtime 资源降级为 warning

未请求任何输出目录时,低层 publish() 可以只计算 layout;这不是文件发布,也不会写出二进制或资源文件。标准 Node 工作流应使用 publishNode()

代码生成的当前实现范围

OpenFairyGUI 当前已经把“代码生成”接入现有 publish 流程,但实现范围仍是正式收口的一条首发口径,不是编辑器全部模板矩阵。

条件当前行为
全局 codeGeneration.allowGenCode=false不生成代码
包级 publish@genCode=false 或未开启该包不生成代码
包级 publish@codePath 有值优先使用包级代码输出路径
包级 publish@codePath 为空回退到全局 codeGeneration.codePath
Unity 项目,且 codeType 为空字符串生成 Unity 风格 .cs 代码
Laya / Cocos Creator 项目生成共享的 fgui TypeScript 代码
其他项目类型当前未实现,跳过生成

当前正式落地的代码生成口径如下:

Lane输出项当前行为
Unity + 空 codeType输出目录codePath/<规范化包名>/
Unity + 空 codeType组件类每个导出组件生成一个 .cs 类文件
Unity + 空 codeTypeBinder每个包生成一个 包名Binder.cs
Unity + 空 codeType清理规则只清理当前包输出目录下、带 FairyGUI 自动生成标记的旧 .cs 文件
共享 fgui TypeScript 模式(Layabox / Cocos Creator)输出目录codePath/<规范化包名>/
共享 fgui TypeScript 模式(Layabox / Cocos Creator)组件类每个导出组件生成一个 .ts 类文件
共享 fgui TypeScript 模式(Layabox / Cocos Creator)Binder每个包生成一个 包名Binder.ts
共享 fgui TypeScript 模式(Layabox / Cocos Creator)运行时口径使用 fguiUIObjectFactory.setExtension(...)
共享 fgui TypeScript 模式(Layabox / Cocos Creator)清理规则只清理当前包输出目录下、带 FairyGUI 自动生成标记的旧 .ts 文件

说明:

  • 这里描述的是 OpenFairyGUI 当前已实现行为,不等同于 FairyGUI 编辑器所有项目类型 / codeType 模板都已支持。
  • 这里的 fgui TypeScript 代码生成口径已经不再依赖 codeType 字段分流;当前由 Layabox 与 Cocos Creator 共用同一条 TS lane。
  • publish 流程也支持 OpenFairyGUI publish 插件接管代码生成。插件目录、生命周期、失败降级,以及与 FairyGUI 编辑器插件的关系见 Publish 插件

包级图集设置真实属性

AtlasSettings 是单个图集项的真实属性对象:

属性含义
name图集名称
compression是否压缩
extractAlpha是否提取 alpha
packSettings打包参数对象

其中 packSettingsPackSettings 承载,编辑器通过它控制更细的打包行为。

默认值

以下默认值来自编辑器 GlobalPublishSettings.read() 的真实行为:

属性默认值 / 规则
path空字符串
branchPath空字符串
packageCount2
compressDesctrue
binaryFormattrue
includeHighResolution0
branchProcessing0
classNamePrefixUI_
memberNamePrefixm_
ignoreNonamefalse
codeType空字符串
allowGenCodetrue
atlasSetting.maxSize2048
atlasSetting.pagingtrue
atlasSetting.sizeOptionpot
atlasSetting.forceSquarefalse
atlasSetting.allowRotationfalse
atlasSetting.trimImage项目版本号 >= 500 时默认 true,否则使用旧默认逻辑
jpegQuality80

fileExtension 的当前实现规则

fileExtension 在 OpenFairyGUI 当前实现中不是完整复刻编辑器全部项目类型矩阵,而是基于已落地的发布逻辑生效。当前正式行为如下:

场景结果
Unity 项目固定为 bytes
Cocos Creator 项目,且 Publish.json 显式设置了 fileExtension使用设置值
Cocos Creator 项目,且 Publish.json 未显式设置 fileExtension默认使用 bin
其他非 Unity 项目,且 Publish.json 显式设置了 fileExtension使用设置值
其他非 Unity 项目,且 Publish.json 未显式设置 fileExtension回退为 fui

当前仓库已正式覆盖的非 Unity 二进制发布口径包括:

  • Layabox:样例工程使用 binaryFormat=truefileExtension="fui",发布结果为 包名.fui
  • Cocos Creator:未显式设置 fileExtension 时默认发布为 包名.bin

编辑器文档中其他项目类型的默认扩展名矩阵,目前不应直接视为 OpenFairyGUI 已实现行为;若仓库尚未实现对应项目类型发布规则,应从当前实现文档中删除,或明确标注为“未实现”。

fileExtension 的编辑器参考矩阵

下面这张表保留的是 FairyGUI 编辑器侧的项目类型规则,用作后续实现对齐时的参考索引;它不代表当前 OpenFairyGUI 已全部实现这些项目类型的发布行为

项目类型结果
Unity固定为 bytes
Cocos2dx / VisionbinaryFormat=true 时为 fui,否则为 bytes
Cry / Monogame / Corona固定为 fui
CocosCreator未显式设置时默认 bin
H5 项目未显式设置时默认 fui
其他项目未显式设置时默认 zip

高分辨率与分支相关属性

属性含义
includeHighResolution位掩码字段,用于表示是否包含 2x / 3x / 4x 资源
branchProcessing分支处理模式
branchPath分支输出路径
seperatedAtlasForBranch分支 atlas 是否单独输出

includeHighResolution 可以理解为 2x3x4x 资源开关对应的位掩码字段:@2x=1@3x=2@4x=4

发布流程只发现并链接工程中已经存在的同路径、同分支、同类型 @2x / @3x / @4x 资源,例如 icon.png 对应 icon@2x.png。它们会作为独立 image / movieclip package item 写入,再由基础 item 的 high-resolution 列表引用;发布期不会主动把原始位图缩放或放大生成高分辨率资源。

branchProcessing 当前可见语义如下:

编辑器行为
0主干包含所有分支,发布结果保留主干与全部分支内容,输出路径使用 path
1主干合并活跃分支,发布结果只保留主干与当前活跃分支合并后的内容;主干输出到 path,非主干分支输出到 branchPath/<branch>(若 branchPath 有值)

seperatedAtlasForBranch 当前可见语义如下:

条件编辑器行为
branchProcessing=0seperatedAtlasForBranch=false主干与分支资源可以进入同一组 atlas 页
branchProcessing=0seperatedAtlasForBranch=true主干 atlas 与分支 atlas 分开输出;分支 atlas 文件名带 _branchName 后缀,例如 atlas0_dev.png
branchProcessing=1发布结果已完成分支合并,seperatedAtlasForBranch 不再单独生效

编辑器写回行为

编辑器在写回 Publish.json 时,当前规则包括:

项目写回规则
branchPath仅在有值时写出
fileExtension仅项目支持自定义扩展名时写出
includeHighResolution仅大于 0 时写出
branchProcessing仅大于 0 时写出
atlasSetting.maxSize2048 时写出
atlasSetting.pagingtrue 时写出
atlasSetting.forceSquaretrue 时写出
atlasSetting.allowRotationtrue 时写出
atlasSetting.trimImagetrue 时写出
compressPNG / jpegQuality仅项目不支持 atlas 时写出

工程写回联动边界

发布设置不改变 component.xml 的 authoring 属性语义。工程读写会独立保留组件根属性、根组件 customProperty 定义,以及组件引用的 ButtonLabelComboBoxProgressBarSliderScrollBar 实例扩展覆盖;对应 XML 协议见 Project XML 属性协议

列表与树节点的布局、渲染顺序、滚动区域、静态条目和树行为属性也按该 XML 协议独立读写; 其中 renderOrder="arch" 使用 apex 记录顶点子项,树节点通过 treeViewindentclickToExpand 保留树行为。

文档边界

项目约束
本文关注点只记录编辑器真实属性、默认值和序列化规则
不写内容不引入项目内部类型、字段映射或实现细节
文档边界本页只描述编辑器设置协议本身,不描述具体项目如何消费这些属性

MIT Licensed