生活
2022年留下最深印象的是疫情,随着时间越接近年末,疫情也越发严重。终于到12月份广州率先放开管制,全国逐步取消了健康码的查看,也不用每天去做核酸。一下子新冠病毒在人群中肆虐开来,一开始只是零星听到几个人感染,很快按照指数级传播,我和媳妇多方面防护,一个月后还是被病毒”光顾“。在这之前被感染的人都说感染病毒后非常难受,社会上还流传着一些大家总结的症状,比如“刀片嗓”,“水泥鼻”,“无麻醉开颅”。表弟和我成长经历相似,他人在北京,第一波就感染了,问他这个病毒威力如何,他表示是自己人生中最难受的时刻。等我病毒上身之后,先是在工位上坐立不安,大脑昏昏沉沉,中午紧急回家,胃口倒还好,吃完之后,抱有侥幸心里,睡一觉估计解决问题,单很快开始发烧,在半睡半醒之间来回切换,多亏媳妇照顾,三天后发烧结束,这是我的幸运,对于要孤身一人对抗病毒的个人,你们太坚强勇敢了,给予最高的敬意。
工作
2022年开始完全投入了新的项目开发,这一整年,团队不断的实现项目功能,同时也在探索研究UE4相关技术。我在这新的一年遇到了技术和管理方面双重考验,先来谈谈技术方面。
技术
搭建工程管线,此项工作主要目的是让所有职能同学各司其职,将自己的工作产出上传到版本控制,需要获取其他人工作内容时,不用关心暗盒的具体逻辑,只需用最简易的方式打开生产工具。为了做好此工程管线,需要深入了解版本控制,各职能的需求,以及不同工具之间如何通信。在不断的深度使用后,在年末的时候总结经验教训,重新设计了项目分支规则,以及完善了后台处理脚本。通过这件事,得到的启示是好的工程设计不一定要面面俱到,稳定,可扩展性强,可维护性高,上手简单才是好的设计。不要因为使用率很低的功能而设计复杂的功能,为了简易性和健壮性合理的冗余资源占用是可以接受的。另外一定要理论结合实践,很多时候看了文档和最终的实践差90%的工作量,对理论知识的完全掌握理解也差90%左右。
UE4 dedicated server,使用UE4引擎开发,客户端与服务器可以共享代码,这项技术初看起来非常诱人,但“没有银弹”这条软件行业的铁律永远不过时。UE4引擎有个非常大的特点,当看到文档介绍相关功能时,会给大家一个误解,此项技术很好上手,也很好用。但这些都是烟雾弹,因为写这些文档的人都是为最简易的项目需求写的文档。等自己要测试使用时,不仅对此模块要有详尽的了解,同时对于此模块和其他模块是如何交互的也需要了解。记着刚开始为了测试多个PC客户端之间互相同步的功能,开第二个PC客户端就黑屏,花了比较久的时间追踪相关代码才发现是UE4 Editor的BUG。同时发现UE4的官方文档对于这块的说明也是旧的文档。从这件事上领略到一个好的技术团队肯定是经过多年磨合,同时在引擎和开发技术上有积累才会做出更好的产品。
C++,今年遇到两个相关问题印象深刻,我们使用UE4引擎,脚本层使用Mono,这两者之间的交互层为UE4 C++和Mono C++之间的通信。这个中间层在UE4 Editor下都是正常运行的,但出了PC包之后,抛出异常找不到Mono层的信息,对于这种不同平台运行不一致的问题很难查,第一时间查看相关堆栈,理清楚这部分的逻辑,反向猜测发生问题的原因。此法不通,只好将Editor和PC包模式下两边的调用流程比较,最后发现原因就是经典的C++ 全局静态变量初始化顺序问题。后一个问题是其他项目遇到“野指针”访问问题,求助有没有好的方法解决此问题。我在浏览知乎的时候,有看到其他人分享过一篇相关文章,还顺着这篇文章找到了为UE4添加相关技术的人原始博客,了解到了此项技术的来龙去脉。但具体如何操作使用,以及“访问到被释放后的内存“是如何监测到异常,对于这个技术细节并没有搞清楚。在这次其他项目的实践中,协助他们解决了问题,自己也真正掌握了其中的技术关键。这两件事给我的启示还是一样,技术问题不能只看,看到了只是了解了10%不到,真正的实验了,并且将技术用到实际项目中,并且经受了考验,才是真正掌握了技术。并且再次深刻理解到了学习技术无止境,要看高手是如何思考问题,以及如何想到解决方案,最终落地实践的。技术是学不完的,但明白基础知识是所有技术的根本,如何在遇到问题时通过基础技术推演出解决方案,这是需要可以训练和总结的。
群体AI,对于普通游戏开发者,理解的AI是寻路,状态机,决策树。做过AI的人都有一个体会,AI调试费时间,因为AI流程是一个过程,在这整个过程中,任一一点都可能出问题,出了问题就需要溯源,找到问题原因,那么在出问题之前的所有结点都有可能是疑点。所以当要开发群体AI时,问题复杂度瞬间飙升。在失败和错误的基础上不断学习积累,慢慢摸索出了一些经验技巧,问题追踪,问题简化,问题缩小范围。这里应给单独写一篇博客介绍。
面试,看了以下今年的工作记录日志,平均每个月都有两个面试,通过这项工作一方面了解到了行业动态,同时面试者的个人经历形形色色,所涉及的技术丰富繁杂,这过程中对自己的技术有相应提高和启发。更加重要的是,如何通过一个小时左右,得到自己想要的信息,以及如何通过自己的技术和个人魅力吸引应聘者这才是真正需要关注的隐藏在冰山下庞然大物。当然平台非常重要,可是遇到优秀的人才,他们的选择本来就很多,如何吸引他们是非常核心的能力。同时看到其他同事对同一个面试者的提问问题和评价非常有帮助,不仅可以看到另外一个角度的被面试者表现,同时也会看到其他同事的面试思路,尤其是当自己和其他面试管反馈不同时,对自己的启发很大。
管理
为什么要设立管理岗位?管理的核心是理事和管人,对于游戏团队,最终目标是将制作人的想法完美落地,当前项目规模都很大,不同职能分工非常精细,专业的事情交给专业的人。从程序团队主管角度来看,程序团队的定位是项目高效科学的实施和落地。为了达成这个目标,需要沟通合作的有上中下三个方向。
上级,向上沟通项目目标和标准,这里主要沟通对象是制作人。要和制作人同步技术团队核心工作目标,以及技术团队当前的状况,当然对于游戏制作技术上的困难,以及需要的支援都可以谈,上级很大的一个作用就是来帮助我们解决自己无法解决的问题。同时也要和自己的技术主管多做沟通交流,尤其自己在管理上或者技术决策上有迷惑,如果自己无法在合理时间内解决,通过向上级请教是最优先推荐的方式。
中间,和不同的职能齐心协力来达成目标,不同的团队有不同的目标,策划团队想将自己的想法发挥到极致,美术团队想将自己的美术表现和效果做到惊才绝艳,程序团队是最终的实施团队。所以程序团队需要做的就是搭建一个能让其他职能尽情发挥的框架,同时要和其他职能做好沟通,定好标准,告诉他们这世上没有万全之策,要做好平衡工作。
下级,虽说团队人数不多,但麻雀虽小五脏俱全,人少但项目涉及的功能都要有人做。这里主要是三件事,一是主程序是项目质量的第一负责人,对于程序框架,关键技术点要有考量和决断。二是工作拆分,三是识人用人方面。
个人感悟
值得表扬的方面,这一年里在UE4引擎技术方面有了很大的进步,带领技术团队完成了项目评审。另外做的比较好的一点是关注行业技术发展,对技术视野的扩展很有帮助,印象比较深刻的一个是讲“UE4如何解决程序卡死,以及内存越界和访问野指针的文章”,另外一篇讲“如何通过使用移动设备硬件特性提升渲染效率的文章”,还有对我影响非常大的是sony 游骑兵工作室分享的他们的工程工作流,给我的启示有三个方面:一是他们对于工作中遇到的常见问题敢于改善,比如我们使用的版本控制,对于程序很简单,其他职能同事经常会操作失误,这时程序团队第一想法是他们“太笨了”。再比如项目加载速度慢,cook资源慢,大家都知道使用集中cook再下载的模式会加快速度,但不会想到直接在虚拟文件系统的框架下远程加载文件,这里面用到的网络,操作系统,引擎技术令人心驰神往。第二个启示是他们会将我们引以为傲的解决bug的能力,提升性能的技巧,直接使用图形可视化的方式大大提升效率。第三个启示是他们的行动力,里面讲到在做这些改动的时候,遇到过失败和质疑,但他们认为这是正确的方向,只是需要时间,最终结果也证明了他们独到的眼光和坚决执行的决心。接下来着重说一下值得反思的方面。
最核心的问题是时间管理,总是被不同类型的事情打断,导致很多想做的事情没有彻底做完,等到有时间返回来再做的时候,要花许多时间回想之前情景,最令人绝望的是这件事还是有可能被打断。这个问题的主要解决思路还是要将要做的事情分个优先级,要学会识别“伪紧急”的工作,另外要提升自己的沟通能力,将事情优先级合理排序,提升办事效率。另外将自己的时间划分为不同的“时间片”,每天要有固定的时间处理最重要的事情。最后对于耗时超过一周的任务,添加简单的设计文档,用来及时的进入情景。
第二个问题是技术分享少了,查看了下2022年一整年在公共平台发布的文章,技术相关的只有两篇。碎片化的知识记录太多,没有将这些知识加工消化。同时看的技术点太多,真正扎实做实验,应用到项目的太少。
第三个是团队方面,由于后期项目压力排期紧张,每位成员只做了一次code review,好的消息是项目将引入code review平台,在大家提交代码时就需要review。人总是不可靠的,引入工具帮助大家完善流程,克服惰性。
展望
新冠疫情管控状态终于结束了,新的一年里不怕失败,迎难而上,做最好的自己。同时感谢家人对我的照顾,同事领导对我的信任。最后祝大家新年健康,万事顺意。