UE4:NiagaraMeshRenderer的两个bug临时修复
版本 4.27 release
问题一:
在MeshRenderer的SourceMode为Emitter的时候,在EmitterAttributes的命名空间里的VisibilityTag是不生效的,但是SpriteRenderer的SourceMode为Emitter的时候是可以生效的。
问题描述和复现方式:
新建一个NiagaraSystem,从模板添加一个NiagaraEmitter,使用的是SpriteRenderer
将SpriteRenderer的SourceMode改为了Emitter
在EmitterAttributes中添加一个新的int32,重命名为VisibilityTag(因为默认EmitterAttributes的Library中是没有VisibilityTag的,所以试图用这种方式……)
在EmitterSpawn中Set上一步添加的VisibilityTag为0
在EmitterUpdate中添加Set VisibilityTag改为1
此时粒子不显示,因为EmitterUpdate里的VisibilityTag改为了1,这也符合期望表现
但是将Renderer的类型换成MeshRenderer之后,上述的做法就无效了
即,添加一个MeshRenderer,将SourceMode改为Emitter,在EmitterAttrbutes中添加int32改名为VisibilityTag然后在EmitterUpdate中Set为1之后,粒子还是可视的
经过UDN老哥确认,此为Niagara的一个bug,预计将于5.2版本修复。
临时修改方案见后文的源码部分
同时,为了方便美术使用,可以考虑在Niagara constant中直接添加一个EmitterAttributes的变量
问题二:
MeshRenderer的SourceMode切换为Emitter的时候,DynamicMaterialParameter绑定的参数无法正常输出,但是SpriteMeshRenderer切换为Emitter的时候是正常的
问题描述和复现方式:
新建一个NiagaraSystem
添加一个任意模板的Emitter
在Render里添加一个MeshRenderer,此时应该有一个SpriteRenderer和一个MeshRenderer
将两个Renderer的SourceMode都改成Emitter
将SpriteRenderer的Material改为一个Debug材质,比如下图这样的
将MeshRenderer的Enable Material Override打开,并添加材质
在Emitter Attributes中添加一个Vector4类型的变量
新建一个NiagaraDynamicInputScript
大致连线如下:
再将两个Renderer的Bindings里的DynamicMaterialParameter改为上面新增的Vector4
此时会发现,SpriteRenderer渲染出来的粒子显示的值是正确的,但是MeshRenderer渲染出的粒子显示的值是错误的:
相关修改源码:
由于涉及改动的文件较多,懒癌患者决定直接放文件……: