使用Unity后期特效PostProcessing,代码动态添加
2019-09-29 本文已影响0人
AngerCow
我们项目使用Unity自带后期效果组件:PostProcessing。我在运行中代码动态添加了PostProcessLayer组件后就不停报错。代码与报错如下:


让我们看看源码

我们手动在编辑器里添加PostProcessLayer再运行就不会报错了,Init里的Resource不为空,运行中添加的PostProcessLayer组件Init里的Resource是空的。说明我们有没有初始化到数据。
我们再看下PostProcessLayer组件资源

这里我们可以看到,Resources这个是序列化的文件。也就是说可能动态添加组件时,这里的值可能是空的。
通过断点,证明了猜测是对的。在代码里也找到相关注释:

最后这个资源还是没办法运行时获取,最后我只能把这个序列化文件放在可加载路径,通过加载序列化文件,然后再调用一次Init()传入。最后的代码如下:

致此,问题算是解决了,可是这应该不是最好的办法,希望大家有更好的办法请指正一下我。