原生发射器继承
原生发射器继承
原生发射器继承
.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。