unity 主线程调用_[干货]使用Unity引擎时有哪些禁忌?

本文汇总了多位专业人士在使用Unity引擎时遇到的问题和经验教训,包括主线程调用、游戏卡死原因及解决方案、资源管理和优化、错误的编程习惯等。Unity开发需要注意避免线程死锁、过度使用Resources文件夹、混淆FixedUpdate和Update、主线程逻辑过重等问题,同时提倡合理的资源命名、文件夹结构和多线程使用。此外,对于程序设计,强调基础的重要性,避免过度封装和错误的内存管理。在2D游戏开发中,应避免分层问题、内存泄漏、无脑继承和滥用插件等。
摘要由CSDN通过智能技术生成

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. 资源命名

资源命名其实很多朋友忽略掉了,觉得资源命名没有必要。但是其实这个很有必要,因为我们在项目后期会涉及到批量操作资源,比如我们要将某系统的图片格式资源批量替换格式呀,我们要将动画批量创建动画控制器呀。还有一些程序自动化处理一些工作,比如我们对某种格式命名的资源设置不同的参数。例:图片根据后缀名字不同设置不同的图片格式。这是非常节省时间和避免人为出错的方法。

8c62fdcf479550e8b91745ab80fd86ff.png

(输入eff就出来和特效有关的所有贴图资源,后面为该图片是否带有透明通道等后缀)

3a03ac23d8cd4fc8eadeebbaf95bac26.png

(有了规范命名直接可以在编辑脚本里面批量设置好格式了)

52ff411a27e4b068285c0d8183a9fc28.png

(游戏中的角色动画总是有很多状态和连线,如果每个都让美术人员来连线设置可是要累死人的)

85a6473651855c5edcdc6a0b9a6721aa.png

(而只要我们做好一个正确的模板,美术的动画Clips命名和第一个模板的命名一样,我们就可以脚本批量控制直接拷贝复制参数就可以了,后期如果要修改成批的动画控制器,只用修改模板的属性批量转换一次就搞定)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值