使用 Unity 引擎时有哪些禁忌?

美术和程序两方面描述。
关注者
1,465
被浏览
342,084
登录后你可以
不限量看优质回答 私信答主深度交流 精彩内容一键收藏

其实程序方面的禁忌还是挺多的。
先说一个比较常见而又冷门的:unity编辑器卡死。

早期开发由于很多的不规范,所以导致unity卡死情况是很常见的,最多时一天能卡死十几次。所以后来就总结了些经验了。

1. 线程导致。如果在游戏关闭了,子线程没有关闭,那么在下次游戏启动时,很大情况下会卡死。
而往往有些线程,游戏不关闭是不会关闭的,例如socket的线程。解决方案是,让一个MonoBehaviour伴随游戏的生命周期,然后在移除的时候关闭线程。

2. 死循环导致。这个不用解释了。

3. VS调试导致。偶尔出现,任务管理器显示VS内存在增加,等一段时间有几率正常。初步认为是unity在等待VS响应,所以卡住了。
解决方案是停止调试。
极端情况是VS也未响应,这时候应该要关掉VS,因为unity很有可能有未保存的修改。

4. 大量log导致,伪卡死。log输出是挺耗时的,如果过多,会导致你整个界面卡住。
这种情况可以看任务管理器进行排除,如果是内存一直在增长,那么就不是卡死了。
解决方案,减少不必要的log,对update方法的逻辑排除,尽量避免出现大量的log。

5. 开启游戏时卡死。有些时候场景初始化时间过长会让人以为是卡死。

建议适当的把初始化的逻辑分几帧执行,最好加进度条或者标识。

手机码字,先总结到这里了,有时间再填坑。

6. 运行时状态,修改代码,然后触发Unity重新编译,此过程可能会涉及大量代码序列化和反序列化,等待响应的时间有可能会比较长(伪卡死)。也有可能有些对象不能序列化,然后再编译完成后,运行的代码会出现大量访问空对象错误,大量的Error输出,导致类似 4 的情况。


2018.3.25

7. 最近遇上的,线程死锁导致的,这个比较难查。只能细心的按照线程死锁的情况分析下代码。