出现d3d11问题导致编辑器崩溃

出现d3d11问题导致编辑器崩溃


升级到Unity 6,有时出现下面这种D3D11的问题,会导致编辑器崩溃。

在 Windows 系统中,当显卡由于长时间忙碌而被重置时,可能会导致这个不可恢复的错误。在部分情况下,如果不及时处理,还可能出现 BSOD(蓝屏死机)VIDEO_TDR_FAILURE 。如果检测到当前 TDR 值 低于 10 秒,就会弹出提示窗口。


为什么 GPU 驱动会崩溃?

为了防止渲染或 GPU 计算任务长时间占用系统,Windows 操作系统会在渲染时间超过几秒时强制终止 GPU 驱动。驱动被终止后,相关的应用程序会随之崩溃。

由于 GPU 渲染或计算任务的时间长短与多种因素有关(例如 GPU 性能、驱动版本、操作系统、网格大小、纹理大小等),因此无法从应用程序层面预估并避免此类崩溃。

Windows 系统中有一个注册表键值用于指定系统等待 GPU 响应的时间长度(即 TDR 值 )。应用程序无法直接修改这个设置,但用户可以手动调整。

更多信息参考官方文档:TDR 注册表键文档


以下是多个用户尝试并验证过的解决方案,希望能帮助你快速解决问题。如有新方法,欢迎补充。

可以优先尝试6:修改 TDRDelay 和 TDRDdiDelay 值。

如果不行的话,再试试其他方法。因为造成这个问题的原因比较多。


解决方案列表

1. 在 Windows 设置中指定首选显卡

通过设置让 Unity 使用你的独立显卡,而非集成显卡(通常性能较差)。

  • 路径:
    设置 > 系统 > 显示 > 图形设置 > “选择要设置首选项的应用” > 桌面应用 > 浏览
  • 选择你的 Unity 编辑器路径(unity.exe),然后点击“选项”,设置为“高性能”。
  • 提示: 可通过任务管理器的性能选项卡确认 Unity 是否使用集成显卡。

2. 在 Nvidia 控制面板中指定显卡设置

确保在 Nvidia 控制面板中,为 Unity 编辑器设置使用独立显卡。

  • 路径:
    打开 Nvidia 控制面板 > 管理 3D 设置 > 程序设置
    unity.exe 指定独立显卡。

3. 将 Unity 添加到杀毒软件白名单

某些杀毒软件可能干扰 Unity 的运行,可尝试将 unity.exe 添加到白名单中。

  • 如果问题仍未解决,可暂时关闭杀毒软件测试(但不建议长期关闭)。

4. 删除项目的 Library 文件夹
  • 方法:
    关闭 Unity 后,删除项目目录下的 Library 文件夹。重新打开项目时,Unity 会自动重建此文件夹。
  • 效果: 有用户反馈此操作能解决问题。

5. 进行 Windows 就地升级
  • 方法:
    下载 Windows 最新版本的安装程序,执行“就地升级”。
    • 在安装过程中选择“保留我的文件”以及“保留我的应用”。
    • 效果: 一些用户反馈此操作能修复系统问题。

6. 修改 TDRDelay 和 TDRDdiDelay 值
  • 原理: 增加显卡响应的超时时间,以防止 Windows 过早重置显卡。
  • 风险: 设置不当可能导致系统不稳定,甚至蓝屏死机(BSOD)。
  • 修改方法:
    参考 Adobe 官方教程

7. 添加 Unity 启动参数 -force-d3d11 或 -force-d3d12
  • 方法:
    • 打开 Unity Hub,点击项目名称右侧的“...” > 高级项目设置。
    • 在“命令行参数”中输入 -force-d3d12-force-d3d11,然后保存并打开项目。
  • 效果: 强制 Unity 使用指定的图形 API,可能解决设备重置问题。

8. 禁用集成显卡
  • 方法:
    在设备管理器中禁用集成显卡。
    • 注意: 如果你的设备只有一张显卡,请不要尝试此方法。

补充建议

  • 更新显卡驱动程序:
    确保显卡驱动程序是通过官方网站(如 Nvidia 官网)下载的最新版本。
  • 联系显卡厂商支持:
    Nvidia 用户可以通过 Nvidia 官方支持 联系工程师寻求帮助。

参考:

1. Failed to present D3D11 swapchain due to device reset/removed. List of Solutions - Unity Engine - Unity Discussions

2. https://helpx.adobe.com/substance-3d-painter/technical-support/technical-issues/gpu-issues/gpu-drivers-crash-with-long-computations-tdr-crash.html

adb调试安卓项目,运行时获取PlayerPrefefs缓存

  1. 反编译APK文件
  2. 修改文件目录中的AndroidManifest.xml文件,在标签中添加android:debuggable="true"属性
  3. 回编apk,对齐align,重签名
  4. 运行app
  5. 执行
    adb shell
    run-as <package_name>
    cat shared_prefs/<package_name>.v2.playerprefs.xml

使用 AlphaSSL 泛域名证书

AlphaSSL

AlphaSSL证书是全球著名SSL证书颁发机构GlobalSign旗下的信息安全产品,是专业的SSL证书提供商,专业提供便宜SSL证书

支持的SSL证书类型较为单一

AlphaSSL证书属于入门级SSL证书,目前仅支持域名验证(DV SSL证书),所以价格便宜,通常一年只要几百元,便可为个人网站提供最基本的安全保护。

审核简单、签发速度快

AlphaSSL证书按照网站保护域名数量不同,有单域名证书和通配符证书可供选择,申请流程很简单,CA机构只需验证域名所有权,域名验证通过后CA便会签发证书。

此外,AlphaSSL证书除了价格便宜之外,还带有兼容性强、强大的加密功能的优点。所有流行的浏览器和移动设备都可以识别AlphaSSL证书。AlphaSSL证书是从2048位的GlobalSign根证书颁发的,该证书是世界上运营时间最长,最受信任的权威之一,同时还将在客户和网站之间获得256位加密强度,这是当今使用率最高的加密强度。

通过上文介绍,目前AlphaSSL证书仅有DV SSL证书可选,如果是企业网站的话,还是选GlobalSign旗下品牌的安全级别高的企业型OV SSL证书或增强型EV SSL证书,以加强网站信息安全保护。

购买一个Token

申请流程参考