1. unity编辑器卡死
知乎作者:Lawliet
早期开发由于很多的不规范,所以导致unity卡死情况是很常见的,最多时一天能卡死十几次。所以后来就总结了些经验了。
线程导致。如果在游戏关闭了,子线程没有关闭,那么在下次游戏启动时,很大情况下会卡死。而往往有些线程,游戏不关闭是不会关闭的,例如socket的线程。解决方案是,让一个MonoBehaviour伴随游戏的生命周期,然后在移除的时候关闭线程。
死循环导致。这个不用解释了。
VS调试导致。偶尔出现,任务管理器显示VS内存在增加,等一段时间有几率正常。初步认为是unity在等待VS响应,所以卡住了。解决方案是停止调试。极端情况是VS也未响应,这时候应该要关掉VS,因为unity很有可能有未保存的修改。
大量log导致,伪卡死。log输出是挺耗时的,如果过多,会导致你整个界面卡住。这种情况可以看任务管理器进行排除,如果是内存一直在增长,那么就不是卡死了。解决方案,减少不必要的log,对update方法的逻辑排除,尽量避免出现大量的log。
开启游戏时卡死。有些时候场景初始化时间过长会让人以为是卡死。
建议适当的把初始化的逻辑分几帧执行,最好加进度条或者标识。
运行时状态,修改代码,然后触发Unity重新编译,此过程可能会涉及大量代码序列化和反序列化,等待响应的时间有可能会比较长(伪卡死)。也有可能有些对象不能序列化,然后再编译完成后,运行的代码会出现大量访问空对象错误,大量的Error输出,导致类似4的情况。
最近遇上的,线程死锁导致的,这个比较难查。只能细心的按照线程死锁的情况分析下代码。
2.关于游戏开发优化相关
知乎作者:Meta
看到这个想到的并不是什么禁忌,Unity引擎的很多问题楼上各位都已经讲解差不多了,我就补上几个和游戏开发相关的优化方案,应该是任何引擎都适用的。尤其针对初创团队,没有核心的技术骨干时,经常会走一些弯路,有时候游戏做出来Demo了效果很棒,但是要开始上线运营了,要修改资源和扩展功能做适配的时候,开始头疼花太多的时间去处理资源,往往一优化就是一两个月。我讲一些简单却有必要的点吧,概念本身没有任何的技术难度
A. 资源命名
资源命名其实很多朋友忽略掉了,觉得资源命名没有必要。但是其实这个很有必要,因为我们在项目后期会涉及到批量操作资源,比如我们要将某系统的图片格式资源批量替换格式呀,我们要将动画批量创建动画控制器呀。还有一些程序自动化处理一些工作,比如我们对某种格式命名的资源设置不同的参数。例:图片根据后缀名字不同设置不同的图片格式。这是非常节省时间和避免人为出错的方法。
(输入eff就出来和特效有关的所有贴图资源,后面为该图片是否带有透明通道等后缀)
(有了规范命名直接可以在编辑脚本里面批量设置好格式了)
(游戏中的角色动画总是有很多状态和连线,如果每个都让美术人员来连线设置可是要累死人的)
(而只要我们做好一个正确的模板,美术的动画Clips命名和第一个模板的命名一样,我们就可以脚本批量控制直接拷贝复制参数就可以了,后期如果要修改成批的动画控制器,只用修改模板的属性批量转换一次就搞定)