Unity那些让人忧心的小问题汇总(2021-04)
这个系列贴存在的意义是什么?
网上FAQ很多,不过大多数更新不够及时,部分答案甚至可能是误导。我会尽可能收集整理项目中发现的问题以及解决方法,及时更新供参考。
Unity在商业公司内能使用Personal免费版么?Unity现在还能XX么?
请联系团队负责人和IT申请公司的正版授权。在公司内用免费版,大概率会被封号(官方有IP监控)。不推荐XX,自用可以买个Plus版,虽然每年都涨价。早买早享受,或者等双11折扣季。
如果因为特殊情况真的需要XX,请翻墙下载官网版本XX。 国内IP下载的版本是加壳的无法XX。Unity2019开始需要连同UnityHub一起XX。
2021年了,新项目/版本更新应该选哪个Unity版本?
- 老项目:2017以下的所有版本请更新到2017.4LTS版本。
- 老项目更新:如果对SRP管线没有太多需求,2018.4LTS还是值得信赖。由于2018.3开始很多机制做了大量修改,如果不放心可以只更新到2018.2。
- 新项目:直接2020最新版本起步,并随时更新到即将推出的2020.3LTS。
Unity可以使用C#新语法(7.3+)么?
可以,2018.2以及以下需要配置mcs.rsp和csc.rsp,以及用脚本自动修改一下csproj工程文件。建议直接使用2018.3及之后版本。
Unity自带的Mono运行库听说问题很多,比如内存堆无法归还系统/垃圾回收低效/foreach内存泄漏等?
老黄历了!推荐选用2018以上版本Unity,开启.Net4.x/.NetStandard2支持,运行库已经基本解决以上问题。可喜的是,在2019.2之后可以开启渐进式GC,传统的瞬间GC卡顿的问题大大缓解。
il2cpp容易出一些莫名其妙的问题?
是的,所以用第三方库特别是涉及到反射/序列化等要注意,动态代码生成/emit一概都是不支持的。protobuf/litjson之类常用的库没问题。另,2018之后安卓也正式支持il2cpp,推荐使用。
代码热更新应该怎么选?
目前这个问题只限于iOS平台(Android可以随便更)
- InjectFix:用c#开发,补丁开发也是用c#(推荐)
- xlua:用c#开发,只用xlua打紧急补丁,补丁开发使用lua。
- ILRuntime:只需要c#一种语言就搞定问题了,调试也方便。
- 其他用各种lua绑定写逻辑代码,不推荐。除非有老项目积累,lua党请出门左转不送。
- puerts:xlua作者新作,用typescript编写Unity/Unreal代码 (潜力)
2021年还需要兼顾一些老手机么?
- iOS:建议放弃iPhone6之前的不支持64位指令的老手机,只编译arm64架构即可。
- Android:建议放弃安卓4.3之前不支持OpenGLES3的老型号手机(采用PBR流程线性空间渲染则是强制要求)。此外,x86架构除了兼容一些老模拟器,基本可以放弃。
贴图格式对品质的影响,特别是UI贴图品质问题
- iOS:推荐直接放弃iPhone6之前的型号,直接用ASTC格式。老项目建议分离alpha通道用两张PVRTC。
- Android:推荐直接放弃老手机型号,直接选用ETC2格式。老项目可以分离alpha通道用两张ETC。
UI库应该如何选择?
新项目推荐使用FairyGUI,好用好用好用,说三遍。
有项目经验或积累的可以沿用UGUI。NGUI党请出门左转不送。
项目需要分多个Unity工程么?
甜党、咸党之争。
个人推荐分多个工程,客户端一个Unity工程,美术1-2个工程,公共的部分可以做git submodule来共享。美术工程直接输出assetbundle到资源目录,客户端直接加载assetbundle,避免使用Resource.Load等API。
手游开发也需要做PC版么?
要,很有必要。
如果都用Unity编辑器来运行测试,就得开放几乎所有代码和资源给所有人。如果都直接打手机包来测试,不仅繁琐、速度慢、周期长,还容易造成资源不一致。所以一定要坚持编译最新PC版客户端和资源包,方便多人/多开测试。
另,如果是程序员用mac开发,也请一起发布windows/mac版,给用windows的同事使用。
Unity3D项目应该用git还是svn做版本控制?
用git和svn差不多,现在主流项目开发都用git了。git需要管理员细心地做一些初始配置:
- 使用.gitignore 过滤一些文件类型和临时目录,推荐用 https://www.gitignore.io/ 输入unity 就可以自动帮你生成一份unity工程的忽略模板
- 使用.gitattributes 配置不同文件类型的换行处理以及二进制文件类型识别
- 启用git-lfs 对大的二进制文件配置lfs支持,提高git pull/push执行效率(可选)
听说Unity新的DOTS架构(ECS)很不错,如何尝试?
官方的Entities包一直都处于preview状态(2020甚至都只能手动添加),新项目可以尝鲜。由于ECS架构打破了很多原来面向对象的传统思路和编码习惯,对程序员/设计思路转换要求比较高。同时,对渲染/UI等各个其他环节,ECS的支持并不成熟,需要比较长期的混合代码。
目前ECS最佳实践还是用在战斗逻辑中,特别是帧同步的战斗逻辑/数据。此外,如果是尝鲜还可以试试第三方的Entitas,以及我们魔改过的Entitas-Lite。
评论已关闭