游戏创业公司技术体系构建

来源:互联网 发布:let it go 歌词 编辑:程序博客网 时间:2024/06/06 11:49

一,公司技术团队组建


      当一款游戏项目确认,准备好启动资金之后,就是要考虑怎实现的问题了,技术团队是游戏产品实现的执行者,所以必须先组建一个强有力的技术团队,是成功的第一步。毛主席说过,正确的路线确定之后,干部就是决定因素。正所谓千军易得,一将难求。一个团队亦是如此,所以技术团队的负责人的能力,经验,很重要,丰富的经验可以使团队少走很多弯路。孙子说,为将者,智,信,仁,勇,严也,智为知识多,信为说到做到,仁为善于管道,统筹兼顾,勇为敢于承担,严为仔细认真。所以做为一名技术主管,要能力强,会带人,能服众,保证团队的稳定,高效,团结,才能更好的完成任务。


      公司初期,技术团队可能只需要三四个人,主要负责游戏客户端开发,服务器开发,测试开发,游管理方面的开发。这个阶段的主要任务就是快速实现游戏内容,让策划和产品负责人尽快能见到游戏可操作的功能,方便他们后期调整与新的功能设计。随着研发进度的推进,技术团队会逐步扩充,所以要让新人尽快的融入到团队中是负责人的项重要工作,正所谓,兵不练不足以战。


      游戏技术团队一般有两种,一,负责人对客户端和服务器开发都有相关经验,这时,技术团队可以采用一人负责制,由他全面统筹管理技术团队,直接对外负责,这样的好处是团队的进度可以统一管理和调配,减少沟通成本;另外一种是客户端有一个人负责,服务器端有一个人负责,两人同时对外负责,两人共同协调技术团队的管理,如果有争议,需更高管理者解决,沟通成本增加,但技术管理更专业化,可以分工,提高代码质量所以技术团队的组建,技术负责人很重要,他对成败起着关键的作用,能力弱,瞎指挥,会让团队怨气冲天;能力强而独善其身,则发挥不了团队优势,前期人少还看不出来,后面团队人数一多就难以统筹管理了。技术负责人不仅要技术强,还要懂得管理,强调合作。把自身的发展和团队的发展,公司的发展融为一体。


二,游戏开发技术的选择


    在游戏项目确定之后,团队组建初期,需要调研确认使用哪种技术来实现游戏内容。就像战术确定之后,需要什么样的武器去战斗一样。如今互联网的快速发展,新技术的不断涌现,给了我们很多选择。就开发语言来说,不下十几种,最常见的有c++,c#,java,Lua,python,node.js,erlang等等,围绕这些语又有很多开满的框架,以提高开发效率。对于一个没有技术积累的个公司,建议不要使用c++,它虽然是运行效率最高的语言,但是确实是开发效率最低的语言,而且熟练掌握这门语言也是一个挑战。对于客户端来说,目前unity是不二的选择,它不仅是跨平台开发的,而且是最方便的客户端开发引擎。它一般用到的开发语言是c#和Lua。而服务器可选择的开发语言就多了,基本上上面说的开发语言都可以用来进行服务器的开发。


    对于技术的选择,要考虑的因素有以下几点:

      1,开发效率

      2,学习成本

      3,开源组件丰富度

      4,维护成本

      5,运行效率

      6,流行程度


       开发效率快的开发语言,一般基础功能不需要“重复开发”,语言本身现成的api就可以使用,发现异常比较快,一般高级语言就很适合,比如c#,java,可以缩短研发周期,使游戏尽快上线,接受市场的检验。学习成本低的语言,人力资源比较丰富,在团队扩充的时候,招聘相关技术人才的时候相对容易些。丰富的开源组件支持可以大大减少工作量,直接可以融入到自己的项目中,比如网络通信框架,第三方日志工具等。易维护的开发语言在部署服务时可以减少部署步骤,不同平台支持良好,在运行期间如果出现错误,容易定位和解决。运行效率方面一般有个定率,运行效率越高,开发越成本就越高,学习成本也越高,所以除非追求极致的运行效率,应该选择效率适中,开发速度快的语言,比如java,node.js,c#等。另外流行程度高的语言相对比较稳定,使用的人比较多,出现问题在网上也能迅速找到相关解决方案。


      另外,技术团队的技术选择也和团队负责人的经验有关,比如,服务器负责人一直使用的是node.js,那么一般这个团队就会选择node.js,如果是java,就会选择java。目前一般来说,对于创业公司来说,最好的选择是unity+c#+lua+java。当然,具体的技术框架就因人而异了。


三,技术团队的管理


      代码规范


      由于每个人的思路不同,受教育的方式不同,每个人的代码风格可能不一样,但是作为一个开发团队,团队之间需要协作,如果每个人都有一套自己的编程风格,那代码阅读起来就比较麻烦了,如果大家的风格都统一起来,变成团队的风格,那代码看起来就像是一个人写的,不同的人看起来也方便,维护也更容易,现在基本上每个团队都会有一套自己的编程规范,如果没有,可以参考一些大公司的规范,比如华为的代码规范,就非常详细! 

 

    核心游戏开发框架统一


      在游戏框架封装时,有一部分是公共的,比如网络通信层,缓存层,数据层,这些都是公共模块,变化的只有功能逻辑,所以可以史针对逻辑制定一套开发流程。只要把底层的公共模块封装好,逻辑功能就可以多人并行开发,以加快开发速度。


     比如长连接游戏的网络层,可以使用异步通信框架netty,它可以用作开发网关,负责与客户端建立长连接,网关与逻辑服务器的交互可以使用消息队列封装为rpc调用。这样逻辑层就不需要关心通信层的实现,中需要关注逻辑开发就可以了。缓存可以分为本地缓存和不同进程缓存,本地缓存可以使用map,但需要注意线程安全和清除策略,这个以后我们再详细分析。不同进程的缓存也叫远程缓存,另起一个进程来缓存数据,通过socket进行交互。目前流行的远程缓存框架是redis,它支持基本的数据结构缓存,比如string,hash,list,set等。


    数据库一般来说使用mysql,对数据库的操作会产生很多io的请求,如果太频繁,会对数据造成很大的压力,一般来说,游戏中对数据库的操作大多数都是更新操作,更新操作的结果可以缓存在缓存中。所以一般会采取定时把缓存中的数据刷新到数据库中。


     系统架构设计能力及原则


      视野开阔,知道可以直接用哪个开源项目来满足这样那样的需求。多数时候其实我们并不需要重复造轮子。视野窄的架构师会放着捷径不走,不断让团队重复造轮子,直至把项目拖死。


      精通设计模式,但又不泛用。不设计过度,不在各种细节问题上需求蔓延。所有架构设计都是为了满足产品需求的,不满足需求或者过度设计都是菜鸟行为。

 

       把系统拆分成多个子系统或模块,模块之间尽量松耦合,使得原先只能串行的开发任务,可以并行开展,也就是说良好的设计可以通过投入更多人力来缩短工期。反之拙劣的设计需要一个人维护一大坨代码,无法通过加人并行开发来缩短工期。


        能清楚地知道系统的瓶颈在什么地方,不断地定位技术难度、研发进度、性能、内存等各方面的瓶颈,不断调整骨干力量解决瓶颈,在风险爆发之前就消除隐患。


        行业经验带来的直觉和预见性,可以预先需求可能产生怎样的变化,提前把可扩展性、后向兼容性设计好。但仍然不要过度设计


    代码管理,打包,测试及自动编译部署


     一个好的代码管理工具可以加快项目的开发速度,现在用的最多的就是git和svn,目前git优势比较大,所以一般会选用git对代码进行管理,在开发中,可以方便的创建分支,合并分支,发布版本等。在开发中,项目也需要一个好的管理插件,目前最流行的java项目管理插件是maven,基本上已取代ant。当项目开发到一定阶段,需要编译打包部署到测试环境中,使用maven可以很快的完成,而且maven + nexus + jenkins可以搭建一个自动编译打包的环境。jenkins可以自动检测git或svn的提交变化,如果检测到变化,就会重新接取代码,并对代码进行编译打包,部署。另外一个重要的是测试,没有经过测试的代码总是有可能有bug,所以测试是项目发布之前的最后一关,是非常重要的。良好的测试可以提前发现80%的bug。测试框架目前流行的是testng,它是junit的升级版。而且它可以和maven相结合,实现自动化测试。


      团队成员技术培训


      一个团队,通过招聘或其它不同的方式大家组合在一起工作,每个人的技术程度有高有低,这样不利于大家协同开发。所以需要对弱者进行培训提高。技术培训的意义有,一,提高团队合作意识。能过简单或定期的培训,可以让团队中的老人和新人加快了解,通过向团队中的老人学习,快速了解项目的各个模块,理解团队的开发风格,更加深刻体会一个项目是由大家合作发开完成的。二,快速提高技术能力。通过培训,阅读团队中高手的代码,增加对具体知识点的了解,开阔视野。快速提高本身的开发能力。三,增加团队成员之间的了解,将来减少沟通的成本。四,增加团队成员的自信心。当一个人的能力越来越强,他的自信心就越强,这样做起事情来效率就越高。


      团队交流与合作


      软件开发,是一种脑力活动。脑力活动对工作的完成量及效率评估是很困难的。因为脑力工作需要的是人的主观能动性。一个人的主观能动性越强,他做起事情来积极性就越高。在团队中,影响成员个人主动性的因素有很多,比如自信心,如果一个人有确少自信,那么他做起事情来,就会畏手畏脚,容易想的多,把简单的事情变化复杂化;二,团队之间交流的态度。如果团队中高手对于别的成员总是趾高气扬,自己牛就看不起其他成员,这样就会突显个人英雄主义,孤芳自赏,没有人愿意与他合作,遇到牵涉到他的模块时不愿意与它交流,总会想办法绕过,而不及时沟通。所以团队之间交流的态度,语气,方式很重要,要懂得尊重他人,理解他人,相互帮助。而不是指责。比如发现某一个bug,就开始嚷嚷说是某某的bug,幸灾乐祸。这对士气本身就是一个打击。而应该以帮忙的方式指出bug,并帮助修改。团队中有一个融洽的气氛,大家朝一个方向努力,士气高涨,工作起来效率就自然而然的高了。


   游戏服务器的基本系统


   1,游戏逻辑功能

    2,日志分析系统

   3,后台管理系统

   4,访问控制系统

   5,性能监控系统

   6,自动部署系统

   7,自动负载系统


   只有当这些系统都开发完成之后,一个游戏项目才算开发完成,可以上线测试。所以创业公司一定要对游戏项目的整体有一个完全的理解,详细的规划,这样可以增加成功的机率。



游戏技术网公众号,扫描加入讨论游戏服务器开发技术