前几天,我一时兴起,把Unity从2021.3.11 LTS 升级到 2021.3.12 LTS,本来以为不会有啥区别,然后意想不到的是,居然出现了编译错误:
我一开始以为这个就是我的工程设置有问题,然后我就就新建了一个Unity的URP示例工程:
然后果然还是重现了上述问题,那就不是我本身工程的问题了,属于Unity自带的问题。然而这样反而更离谱了!
我在网上看了一圈,发现国内还没有人报过这个问题,但是外国论坛上有的用户也遇到了相似的问题,比如这个:
也有的是不同的Unity版本,可以通过升级之类的就能解决了。但是我这个目前无论是Unity还是URP都是最新版本的,所以并不能这么解决。
也有的说通过 Reset Packages to defaults 就能解决。我试过,这个方案确实能解决,他把URP干掉了当然就解决了……
值得说的是,他这个URP12.1.7的包并不是在Unity的 GlobalCache 里面缓存的,我目测是内置在编辑器里的(类似于Build In),所以也无法通过重新下包来解决这个问题。即便删掉Library目录下的 Package 缓存,也是没有用的。
然后我仔细看了下他的编译错误,我这里截取其中一个:
library\packagecache\com.unity.render-pipelines.core@12.1.7\runtime\lighting\probevolume\probereferenevolume.streaming.cs(24,77): error cs0246: the type or namespace name 'cellinfo' could not be found (are you missing a using directive or an assembly reference?)
这个就是说 CellInfo找不到嘛……然而这个确实不知道是个啥东西。
我也看了其他的几个报错,基本都是说的在URP内部包的错误。你可以理解为URP的代码没有完整上传,或者删掉了其中几个类。这种属于低级错误了,这种编译错误都不需要测试人员,编译器自己就能检查出来,纯纯的语法错误。
不过不纠结了。
最后只有一个解决方案了:
降级Unity到 2021.3.11。
总之就是离谱吧。
我看了下降级后的工程,确实没有报错了,然后URP的版本也依然是12.1.7。看来就是Unity新的安装包里内置的URP包有问题,不是URP本身的问题。
如果是在是要用新版本的Uinty,看来只有把2021.3.11的URP拷贝出来,然后在2021.3.12里面用。
(不会Unity 发包的时候都没测试过吧……)
PS:2021.3.12 、 2020.3.41 这两个版本升级风险较高。Unity 修改了一些接口,并且与原来的不兼容,总之,谨慎!