Unity项目编辑器内运行正常 打包导出后菜单按钮无响应问题求助
问题排查与解决方案
你提到的Unity 5版本抛出的断言错误:
Assertion failed: Assertion failed on expression: 'prefab.IsPrefabParent()'
这是Unity旧版本Prefab系统的典型问题,结合编辑器运行正常、打包后菜单无响应的表现,按以下优先级排查即可:
- 优先检查项目内所有脚本的Prefab相关API调用:Unity 5中用于判断Prefab父级的
prefab.IsPrefabParent()、获取父级的PrefabUtility.GetPrefabParent()均在2017版本被废弃,编辑器环境会做向下兼容容错,但是打包编译时(尤其是IL2CPP打包、开启代码裁剪的情况下)会丢失兼容逻辑,导致空引用或者逻辑中断,把所有废弃API替换为2017对应接口PrefabUtility.GetCorrespondingObjectFromSource()、PrefabUtility.IsPartOfPrefabAsset()即可 - 打开发版本包定位运行时错误:在
Player Settings中勾选Development Build、Script Debugging、Log Exceptions,打包后运行应用,同时打开Unity编辑器的Profiler连接到运行的应用,就能看到打包后运行时的具体报错信息,绝大多数编辑器正常打包出错的问题都可以通过该方法直接定位根因 - 检查菜单场景的资源引用:逐一查看菜单页面所有按钮、父节点挂载的组件,确认所有public引用槽位没有引用丢失(显示
Missing),也没有直接拖入Project窗口中的Prefab资源作为引用,Unity 5升2017时会有小概率出现Prefab GUID映射异常,编辑器下会自动检索资源库补全引用,打包后资源是压缩归档的,找不到对应资源就会返回null导致交互逻辑中断 - 检查打包资源范围:确认
Build Settings的场景列表中已经包含菜单场景,所有依赖的Prefab资源没有存放在Editor等特殊目录下(没有按需配置的情况下这些目录的资源不会被打进包体) - 排除代码裁剪问题:如果使用IL2CPP架构打包,把
Managed Stripping Level暂时调整为低,测试打包是否正常,如果恢复正常就把用到Prefab操作的相关脚本配置到link.xml中防止被误裁剪,Unity 2017的代码裁剪逻辑对旧版本项目的Prefab相关API识别准确率较低,很容易误裁有效代码
内容的提问来源于stack exchange,提问作者Jonathan Cohen
相关产品推荐
相关产品推荐

