【Unity3D杂谈】记一次升级Unity3D到2021.3.26f1版本shader踩坑

一、问题描述

之前项目组一直在使用的是Unity3D 2021.3.11版本,但是跑了一点时间,发现崩溃明显增多,于是决定将Unity3D 2021.3.26f1版本。

其实理论上只是最后一位的小版本升级,应该没有太大的兼容性问题才对,升级完其他的问题没有发现,但是发现游戏里一些模型渲染不出来了,整体工程也没有报错。而且最诡异的是,电脑上显示是正常的,只有打到安卓和iOS设备是不正常的。

二、追查过程

由于没有明显的报错,只能拿到必现的那个渲染不出来的模型,改它的shader, 用减法的形式,把shader代码一点点注掉,打到手机里,看看减到哪一步就能渲染出来了。

思路感觉没问题,但是出乎意料的是,最后删完所有逻辑代码,shader内只剩下一个最最简单的贴图采样,都不能正常的渲染。但是新建的一个shader却可以。

此时基本上已经断定是shader库的API变动或引用关系变动的问题了。仔细对比了一下这个shader和新建的shader的区别,找到差异的地方进行实验,最后终于发现了问题所在。

三、解决方案

仔细看了下升级的内容,发现URP版本也有一个小版本升级:
>    从
    "com.unity.render-pipelines.universal": "12.1.7",
    升级到了
    "com.unity.render-pipelines.universal": "12.1.11"

最后发现和阴影相关的引用关系有变化:改法如下:

>           
    旧的编译关系:
    #pragma multi_compile _ _MAIN_LIGHT_SHADOWS
    #pragma multi_compile _ _MAIN_LIGHT_SHADOWS_CASCADE
    修改后的编译关系:
    #pragma multi_compile _ _MAIN_LIGHT_SHADOWS _MAIN_LIGHT_SHADOWS_CASCADE _MAIN_LIGHT_SHADOWS_SCREEN

再重新出包,到手机上就好了。

你可能感兴趣的:(unity,游戏引擎,游戏,3d)