我们项目使用Unity自带后期效果组件:PostProcessing。我在运行中代码动态添加了PostProcessLayer组件后就不停报错。代码与报错如下:

代码

报错
让我们看看源码

PostProcessLayer源码
我们手动在编辑器里添加PostProcessLayer再运行就不会报错了,Init里的Resource不为空,运行中添加的PostProcessLayer组件Init里的Resource是空的。说明我们有没有初始化到数据。
我们再看下PostProcessLayer组件资源
PostProcessLayer组件资源.png
这里我们可以看到,Resources这个是序列化的文件。也就是说可能动态添加组件时,这里的值可能是空的。
通过断点,证明了猜测是对的。在代码里也找到相关注释:

在Unity项目中使用PostProcessing组件时,通过代码动态添加PostProcessLayer会导致运行时错误,因为Init方法中的Resources为空。研究发现,Resources是序列化文件,需要在运行时初始化。为解决此问题,将序列化文件放入可加载路径,运行时加载并调用Init()方法传入资源,从而避免错误。寻求更好的解决方法。

1万+

被折叠的 条评论
为什么被折叠?



