DreamFXLang
工具链

编辑器集成

Tools 菜单、关卡工具栏、Content Browser 右键、Niagara 编辑器工具栏、toast、file watcher 与项目设置。

DreamFX 挂在编辑器 UI 上的每一个地方。

注册者DreamFXEditor 模块启动时,经 UToolMenus::RegisterStartupCallback
ToolMenu ownerDreamFXEditor
关闭方式-NoDreamFXEditor,以及任何 commandlet 运行
设置Project Settings ▸ Plugins ▸ DreamFX

注册是幂等的(跑第二遍什么都不加),编辑器关闭过程中会跳过。

每一个条目调用的都是 commandlet 调用的同一份代码。 菜单是入口,不是第二套实现: Rebuild DFX 能用,dfx build -All 就能用,反之亦然。

Tools 菜单

Tools ▸ DreamFX,扩展 LevelEditor.MainMenu.ToolsDreamFX 分区。

标签作用
Rebuild DFX把每个 .dfs / .dfe / .dfm 压进 watcher 的构建队列,就像它们各自被保存过一样。队列排空后一条汇总 toast
Verify DFX对照生成资产校验每个源码,什么都不写。一条 toast:干净,或者一个指向 Output Log 的漂移计数
Open DreamFX Workspace (VSCode)按当前源码根重写 DFX/DreamFX.code-workspace 并启动它

关卡编辑器工具栏上有两个同样的按钮:DFX(= Rebuild)和 workspace。

Content Browser 右键

加在每类资产上下文菜单原有的 GetAssetActions 分区里。

每一个 DreamFX 右键条目都要求恰好选中一个资产。 选了两个或更多,这个分区是空的, 而且不会有任何解释。右键单个资产。

Niagara System

内容取决于这个资产有没有 DreamFX 溯源戳 —— 生成出来的资产和 导入进来的资产需要的是相反的两件事。

没有溯源戳(DreamFX 没做过它),Decompiler 分区:

条目作用
Export .dfs反编译到 <DecompiledOutputDirectory>/<包路径>.dfs 并打开它。这份文件重建的是 Decompiled/ 下的镜像,原资产永不修改
Adopt (take over as a DFX source)Export 与 Adopt

有溯源戳Source 分区:

条目作用
Open Source打开戳里记的那个 .dfs
Rebuild from Source只把那一个文件排进队列
Verify拿这个资产对照它的源码检查

Niagara Emitter

只有一个条目 —— Export .dfe。一个独立 emitter 没有往返:.dfe 自身不产资产, 所以没有东西可以盖戳、重建或校验。

导出会把 emitter 拷进一个一次性的 /Temp 宿主系统,在那里读,再写文件。这一步是它诚实而不是 猜测的原因:外部编辑 API 的每个读取器都通过一个拥有它的系统寻址。

Niagara 系统编辑器工具栏

AssetEditor.Niagara.ToolBar 上的一个 DreamFX 组合按钮,内容与上面的 System 子菜单相同。

AssetEditor.Niagara.ToolBar 是共享的:FNiagaraSystemToolkitFNiagaraSimCacheToolkitFNiagaraParameterDefinitionsToolkitFNiagaraParameterCollectionToolkitFNiagaraStatelessEmitterTemplateToolkit 返回的 toolkit 名字都是 "Niagara"。 所以这个条目先在正在编辑的对象里找 UNiagaraSystem,找不到就什么都不加 —— 打开一个 Sim Cache 是看不到 DreamFX 按钮的。

toast

toast条件
DreamFX: {Built} built, {Skipped} up to date.没有失败
DreamFX build failed: {FirstError} + Open in VSCode有失败。链接跳到第一处错误的文件、行、列
DreamFX found no .dfs/.dfe/.dfm sources to rebuild.一个源码都没有
DreamFX: {N} source(s) verified, all assets in step.verify 干净
DreamFX: {Drifted} of {N} source(s) out of step ({Failed} failed).verify 有漂移

诊断一直带着位置,在这之前它只到得了日志。

file watcher

每个 DFX/ 根都被监视。存盘 → 排进队列 → 防抖 ticker 按模块 → emitter → 系统的顺序建, 和 commandlet 一致;.dfm 和调用它的 .dfs 一起排队时,这个顺序是承重的。

批次超过 Bulk Rebuild Threshold(默认 8)会改成询问而不是直接建 —— 理由与测量见日常循环

设置

Project Settings ▸ Plugins ▸ DreamFX,存在 Config/DefaultEditor.ini

设置默认作用
Open Workspace In New Windowtrue只有 workspace 启动器读它
Decompiled Output DirectoryDFX/DecompiledExport .dfs / Export .dfe 写到哪(相对项目目录)。这里的文件是普通源码:被发现、被监视、被构建,但必须命名到 Decompiled/ 命名空间(DFX8013
Bulk Rebuild Threshold8超过这个数量的一批改动改成询问

关掉整套集成

UnrealEditor.exe "<Project>.uproject" -NoDreamFXEditor
关掉的仍然有效的
本页所有菜单、工具栏、右键条目-run=DreamFX commandlet(它从来不用这些)
source watcher 与存盘即重建解析器、生成器、反编译器、设置对象
生成资产守卫已经生成并存在磁盘上的资产

commandlet 运行会经另一条路到达同样的状态:IsRunningCommandlet() 为真,模块什么都不注册。

本页目录