m0_73581734 2024-03-30 17:14 采纳率: 0%
浏览 122

Unity打包出来后,运行.exe的时候是黑屏,不能够正常执行。

Unity打包出来后,运行时候是黑屏,不能够正常执行。

img

本来一开始打包,是说Unity.Editor命名空间不存在的,因为我使用了Unity.Editor.AssetDatabase.LoadAssetAtPath<>(),而Unity.Editor只能在Unity编辑器下使用,故而报错,不允许打包。
于是我增加了条件编辑,如下:

img

可正常打包了,于是出现了第一次运行,是黑屏

后来询问后知道,在非编辑器模式下,返回的是null,于是就改成了这样:


public T GetAssetCache<T>(string pathname) where T : UnityEngine.Object
    {
#if UNITY_EDITOR
        string path = "Assets/AssetsPackages" + pathname;
        UnityEngine.Object target = UnityEditor.AssetDatabase.LoadAssetAtPath<T>(path);
        return target as T;
#else
        string path = "Assets/AssetsPackages" + pathname;
        UnityEngine.Object target = UnityEditor.AssetDatabase.LoadAssetAtPath<T>(path);
        return target as T;
#endif
    }

可惜,在非编辑模式下,依然使用了Unity.Editor.AssetDatabase.LoadAssetAtPath<>(),所以不能打包,报错。

最后一次,更改资源加载方式,不用AssetDatabase.LoadAssetAtPath,而是Rescourse.Load,如下:

public T GetAssetCache<T>(string pathname) where T : UnityEngine.Object
    {

#if UNITY_EDITOR
        string path = pathname;
        UnityEngine.Object target = Resources.Load<T>(path);
        return target as T;
#else
        string path = pathname;
        UnityEngine.Object target = Resources.Load<T>(path);
        return target as T;        
#endif
    }

编辑器内可以正常运行,也可以打包。
但是,打包后运行,依然是黑屏?
所以问题不在于资源加载吗?
那会是什么愿意呢?如何解决?

求赐教!

我想要达到的结果,如果你需要快速回答,请尝试 “付费悬赏”
  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-03-30 17:14
    关注

    引自免费微信小程序:皆我百晓生

    问题:Unity打包后,游戏在非编辑器模式下无法正常运行并显示"Unity Crash Handler"错误

    解决步骤如下:

    1. 确认Unity是否在正确的位置打开

      • 打开ProjectSettings -> Environment -> Path.
      • 查看System Variables(系统变量)下的UnityEditor路径是否被设置为正确的位置。
      • 如果UnityEditor路径不是默认路径,确保其位置与Unity项目所在目录一致,例如位于C:\Program Files (x86)\Microsoft Visual Studio\Community\17.0\IDE\CommonExtensionsC:\Users\User\Documents\UnityProjects等。
    2. 检查Unity的版本和脚本结构

      • 单击Assets -> Explorer -> Unity,检查已导入的资源是否有对应版本和更新的脚本(通常放在Assets/Characters或其他类似的文件夹中)。确保当前项目中的所有脚本都保持最新版本。
      • 确保安装的Unity版本与Unity项目的编译环境兼容。可以通过Update Unity Version命令检查是否满足所需的最低版本,或者尝试手动更新至最新版本。
    3. 更新Unity相关库和组件

      • 单击Assets -> Manager -> `Update”,这将检查Unity项目的库和组件是否已过时,并尝试更新到最新的版本。
      • 检查Unity Editor的版本,确保它与所需游戏引擎版本匹配,例如Unity Editor v5.5.2f3(适用于Unity 5.5以上版本),或者是Unity Editor v5.6.3f2(适用于Unity 5.6版本及以后的版本)。
    4. 使用Unity Crash Handler模块进行调试

      • 在项目的Unity项目窗口中,找到并右键点击项目中的项目属性面板,选择Crash Handling -> Add crash handler,在弹出的窗口中,选择Unity Crash Handler 64-bitUnity Crash Handler x64,然后输入对应的错误代码。
      • 将残余的Unity CrashHandler64Unity Crash Handler x64替换为你的Unity Crash Handler 64-bitUnity Crash Handler x64的名称,如UnityCrashHandler64
    5. 在VSCode中添加断点并跟踪代码执行

      • 在VSCode中,选择要跟踪的变量、方法或函数,然后在左上角菜单栏点击File -> New Watcher...,输入Unity CrashesUnity Debug,然后勾选 Restart on Save选项,使代码在保存时自动重新跟踪。
    6. 启用Unity Editor中的调试功能

      • 在VSCode的顶部菜单栏点击Edit -> Live Templates -> UI Rules,然后在弹出的窗口中,勾选Live Templates > Debugger > Unity Breakpoints,这将开启Unity Editor的断点功能。
      • 在Unity工程中,选择要创建断点的资产或对象,右键点击,选择Break,在弹出的窗口中输入相关的断点描述。
    7. 复现问题并逐步排查

      • 导入相关库和组件到你的Unity项目,确保没有未引入的依赖项。
      • 编写简单的脚本来模拟可能出现的问题,比如在同一帧内重复操作导致黑屏、资源加载失败或程序崩溃等。
      • 使用VSCode的Step into功能逐渐进入代码执行流程,观察各种可能影响游戏运行的情况,记录每个暂停点的详细信息,包括但不限于:
        • 前文提到的Unity Crash Handler模块的错误代码。
        • 当前代码行的行号、变量值等关键信息。
        • 发生崩溃的事件(如内存泄漏、异常处理失当等)。
        • 非编辑器模式下发生的问题(如资源加载或游戏逻辑的异步性问题)。
        • 可能引发黑屏的具体情况(如图像是透明的、运行内存溢出、其他操作系统问题等)。
    8. 排除Unity引擎本身的问题

      • 如果上述步骤都无法确定问题原因,考虑检查Unity引擎的配置或更新:
        • 通过Unity Editor -> Preferences -> Editor -> Options -> Build Settings,查看是否存在特定的Build Setting (BS)(如UNITY_5E_EDITORbuildSettings),如果有,将其删除或修改成默认值。
        • 重启Unity Editor,或者在Unity主进程中添加相应的Unity Engine Update,确保在不同版本或环境下测试兼容性。
        • 在Unity Tools菜单中,搜索和卸载可能导致Unity Crash Handler错误的插件或扩展。
    9. 重置安装流程

      • 从Unity官网下载适合当前Visual Studio Code版本的版本,例如v5.6.3f2或更高版本。
      • 如果Unity 5.6或以下版本已经过时,建议使用官方推荐的Unity 5.5.2f3或更高版本。
    10. 利用Unity Inspector检查游戏状态

    • 打开Unity project,在Inspector窗口中,通过拖拽资源和组件,查看它们的状态和约束条件,检查是否存在潜在的冲突或异常情况。
    1. 备份和还原游戏数据
    • 对于涉及崩溃或不稳定的游戏状态,备份重要游戏数据以防数据丢失。在本地磁盘上复制游戏数据,然后创建一个独立的服务器端项目,包含与原Unity项目相同的资源和游戏逻辑,然后在远程服务器上运行与原Unity项目相同的Unity项目,根据情况执行正确的文件解压缩或重新构建过程。
    1. 使用可靠调试器
    • 如果Unity Console仍无法提供有效的调试信息,考虑使用更专业的开发工具或集成开发环境(IDE),如Visual Studio Code Remote Debugger或VSCode Debugger for Unity。
    • 安装或调整VSCode插件,如Fiddler、XcodeIDE或Atom, 这些工具支持调试Web API、Socket通信、调试Unity脚本等功能,有助于在非编辑器模式下定位和修复问题。
    1. 排除平台限制
    • 判断目标平台(如Windows、macOS、Linux等)是否支持所需的性能要求,了解Unity是否有针对不同平台优化的特性。
    • 清除跨平台编码设置,如C++/CLI的支持配置,以便更好地关注Unity引擎在特定平台上可能遇到的问题。
    • 如果目标平台对Unity引擎或图形卡有特殊要求,可以提前了解并配置适当的设置。
    1. 考虑外部因素
    • 如果已经尝试了上述所有步骤,但问题仍然存在,检查Unity项目的进程和进程管理设置,如PID、工作线程数量等,确保有足够的资源供Unity引擎和其他依赖项正常运行。
    • 备份Unity项目的关键数据,例如蓝图、蓝图导出文件、脚本等,防止在可能的操作中丢失。
    • 关注Unity Play Store、GitHub或Steam社区上的反馈和讨论,看看是否有开发者或玩家报告类似问题,从中获知可能的解决方案或建议。

    通过这些步骤排查,你应该能够找出Unity打包后无法正常运行的原因,并针对性地进行修复。需要注意的是,每次改变项目设置或安装新版本可能会带来一些适应性的调整,因此需逐步执行并记录每一个步骤的结果,以便后续分析和总结。若上述步骤均无效,可能是某些高级优化设置导致的问题,这可能需要更多的专业技术支持。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 3月30日

悬赏问题

  • ¥50 求大神教题,这个代码和讲解思路都怎么写呀,完全卡住了
  • ¥15 基于ffmpeg 编码成yuv420p nv12的问题
  • ¥15 python随机森林对两个excel表格读取,shap报错
  • ¥15 基于STM32心率血氧监测(OLED显示)相关代码运行成功后烧录成功OLED显示屏不显示的原因是什么
  • ¥100 X轴为分离变量(因子变量),如何控制X轴每个分类变量的长度。
  • ¥30 求给定范围的全体素数p的(p-2)/p的连乘积值
  • ¥15 VFP如何使用阿里TTS实现文字转语音?
  • ¥100 需要跳转番茄畅听app的adb命令
  • ¥50 寻找一位有逆向游戏盾sdk 应用程序经验的技术
  • ¥15 请问有用MZmine处理 “Waters SYNAPT G2-Si QTOF质谱仪在MSE模式下采集的非靶向数据” 的分析教程吗