DreamFXLang
插件参考Language

原生发射器继承

原生发射器继承

原生发射器继承

.dfs 系统中的发射器可以继承一个独立的 Niagara 发射器资产:

System(Name="NS_Child", Root="Game")
{
    Emitter Sparks inherits "/Game/FX/NE_Parent.NE_Parent"
    {
        Settings = { LocalSpace = false; }
        ParticleUpdate = { Particles.MyValue = 2; }
    }
}

这会创建一个真实的 Niagara 父级关联。from "...dfe" 会继续复制并合并 DreamFX 发射器源;from 和 inherits 不能出现在同一个发射器上。

父级必须是一个可继承的 UNiagaraEmitter。若未使用版本子句,生成时会选择其已公开的版本。可使用其 GUID 固定到特定版本:

Emitter Sparks inherits "/Game/FX/NE_Parent.NE_Parent" version "01234567-89ab-cdef-0123-456789abcdef"
{
}

未知的固定 GUID 会以 DFX3056 被拒绝,即使该发射器禁用了版本管理也是如此;它绝不会静默选择其他版本。如果原生父级自身也进行继承且存在未合并的祖先更改,生成时还会报告 DFX3056。请在 Niagara 中合并并保存该父级,然后再重新构建子级。DreamFX 不会修改父级资产来解决这些更改。

覆盖

  • 省略的设置和默认值保留其父级值。移除某个源覆盖后,会在下次重新构建时恢复父级值。
  • 省略的普通堆栈会继承其父级堆栈。显式堆栈会替换整个块。ParticleSpawn = {} 会故意清除继承的生成堆栈。
  • 未声明任何渲染器时保留所有父级渲染器。一个或多个声明会替换整个渲染器组。
  • 未声明任何阶段时保留所有父级阶段。显式的阶段声明会替换整个阶段组。
  • 显式的 OnEvent 会替换整个继承的事件处理程序组。源仍只允许一个处理程序;省略 OnEvent 会保留所有父级处理程序。

目前尚无用于空渲染器/阶段组,或移除继承的默认值或事件处理程序的写法。省略这些声明意味着继承,而非移除。

对原生父级的更改会使所生成系统的依赖指纹失效,因此即使 .dfs 文本未变,后续构建也会重新应用继承的值。

导出的行为

系统导出会保留 inherits,并始终固定到实际的父级版本。它会将设置、默认值、普通堆栈和渲染器组与该版本的父级进行比较。相同的内容会保持隐式,包括继承的模块和渲染器。

如果子级存在未合并的父级更改,导出会报告覆盖缺口。请在采用其源之前在 Niagara 中合并子级:否则,过期的继承值可能会被导出为显式覆盖。无效、已禁用或未同步的父级资产也会产生缺口,而不是生成一个看起来完整却无法重新构建的导出。

更改的普通堆栈会作为完整块导出,包括空块。更改的渲染器组会完整导出。DFX8014 说明,重新构建时,这些显式块内的后续父级更改将被覆盖。事件处理程序和模拟阶段目前会作为快照导出,并具有同样的限制;导出器并不声称对这些块进行细粒度的原生合并。

移除所有继承的渲染器或阶段、移除继承的事件处理程序,以及移除继承的默认值都无法表示。导出会将这些记录为覆盖缺口并输出 DFX8014;在将结果用作资产的真实来源之前,请检查这些缺口。

独立 .dfe 导出仍没有原生父级头语法。它会导出一个快照,并以 DFX8014 报告原生继承的丢失。当必须保留父级关联时,请将所属系统导出到 .dfs。

本页目录