记录一个打包bug
前言
一开始这个项目是准备build在ios设备上的,当我进行测试的时候我以为是ios打包的时候出的问题,所以准备晚一点再解决这个问题。由于制作网络模块需要多个exe同时运行,我必须要build出来测试,所以我将这个项目build在windows平台上,没想到也发生了一样的bug, 我才意识到是代码的问题,此篇文章详细记录了Debug过程。
- 错误一: 如下图所示,当我打开背包,并未拖拽背包内Item时,就出现了拖拽时候才应该被SetActive的UI
- 错误二: 如下图所示, 可见构建后的exe程序中,胶囊浮动的射线检测出现了问题
查看Unity生成exe的Debug信息
在看遍了Google所有和构建, 射线失效相关文章无果后,意识到应该是自己写的代码问题
打开windows系统中的AppData文件,此文件默认隐藏,需要在资源管理器显示隐藏的项目
Appdata-LocalLow-DefaultCompany-UnityDemo-Player.txt文件为exe的调试信息
其中DefaultCompany和UnityDemo为UnityEditor中用户设定的
可以在Project Setting-Player中设定
打开后可以看到和Editor Console中类似的输出信息
解决问题一
经过一番调试,最终定位到这句语句
1 |
|
根据Unity官方文档,至今也没有思考出来为什么编辑器模式下正常, build成exe就报错
修改如下后正常运行
1 |
|
解决问题二
根据exe的输出信息定位到FloatCapsule()
, 起初一直认为是射线检测的问题,经过一番调试后(一个参数一个参数判断是否为null), 定位到 ColliderUtility.CapsuleColliderData.Collider.bounds.center
最后发现是由于 OnValidate()
函数只在Editor中执行, 修改到 Awake()
中解决此问题
为什么会在代码中用到这个函数呢?
我的浮动胶囊参考了这个视频教程
作者当时使用这个函数可能是为了测试过实际高度后,把高度记录下来,后续直接使用测试出来的数值,所以就放在OnValidate()
中。但是我希望这个脚本文件可以适应不同的角色模型,所以我选择把他放在OnAwake()
中,仅在游戏开始的时候计算一次。以后使用OnVlidate()
需要加FIXME
,提醒自己打包前写成固定值!