记录项目从旧版本升级到 Unity 2022 过程中遇到的几个典型问题及解决方案。

问题一:Package Manager 只有 Remove 按钮,无法下载 URP

现象:升级 Unity 版本后,打开 Package Manager,URP 包只显示 Remove,点击后也无法重新下载安装。

原因:原项目对 URP 进行过源码修改,升级后残留了本地嵌入式包目录:

{项目根目录}/Packages/com.unity.render-pipelines.universal@xx.x.x

解决方案

  1. 删除 Packages/ 目录下的 com.unity.render-pipelines.universal@xx.x.x 文件夹
  2. Library/PackageCache/ 目录中找到对应版本的 URP 文件夹,复制到 Packages/ 目录下
  3. 将复制过来的文件夹名末尾的 @xx.x.x 版本后缀删除

这样插件就恢复为本地源码模式,可以正常编辑修改。


问题二:Android 出包运行黑屏,URP NullReferenceException

现象:升级后打出 APK,运行时黑屏,Logcat 报错:

Non-fatal Exception: java.lang.Exception: NullReferenceException : Object reference not set to an instance of an object.
at UnityEngine.Rendering.Universal.UniversalRenderPipeline.SetupPerFrameShaderConstants(...)
at UnityEngine.Rendering.Universal.UniversalRenderPipeline.Render(...)
at UnityEngine.Rendering.RenderPipelineManager.DoRenderLoop_Internal(...)

原因:Unity 2022 的 URP 在初始化 Blue Noise Texture 时存在空引用问题。

参考讨论:Unity Forum - Null reference in URP’s SetupPerFrameShaderConstants

解决方案

  1. 在 Project 窗口中找到 UniversalRenderPipelineAsset.asset
  2. 在 Inspector 中取消勾选 LOD Cross Fade
  3. 确认下方的 LOD Cross Fade Dithering Type 变为灰色(不可选)即可

问题三:HTTP 请求失败(Unity 2022 默认禁用 HTTP)

现象:升级后 Android 包内的 HTTP 请求全部失败,网络功能异常。

原因:Unity 2022 默认禁用了明文 HTTP 协议,仅允许 HTTPS。

解决方案

打开 Edit → Project Settings → Player,切换到 Android 平台,找到:

Other Settings → Configuration → Allow downloads over HTTP

将选项改为允许即可。

建议:长期来看应将接口迁移到 HTTPS,HTTP 存在安全风险,此配置仅作临时过渡使用。