一,公司技术团队组建

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

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

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

二,游戏开发技术的选择

在游戏项目确定之后,团队组建初期,需要调研确认使用哪种技术来实现游戏内容。就像战术确定之后,需要什么样的武器去战斗一样。如今互联网的快速发展,新技术的不断涌现,给了我们很多选择。就开发语言来说,不下十几种,最常见的有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,自动负载系统

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

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

游戏创业公司技术体系构建相关推荐

  1. 技术体系构建_构建出色的技术简历的简单指南

    技术体系构建 Whether you're an aspiring software engineer or a seasoned developer, there are times when yo ...

  2. 云原生高可用技术体系构建

    伴随着互联网业务的高速发展,越来越多的线下场景需要转移到线上,而线上业务的量级也在飞速增长,给互联网业务的技术架构带来了严峻的挑战,原来的"一体机+数据库"的方式已经不适用于当前的 ...

  3. 张新波 | 十面埋伏 - 论大数据风控技术体系的构建

    2017.3.11,中生代技术嘉年华在上海盛大召开,6大主题.20话题,600多位小伙伴点燃现场,我们将会陆续将各话题整理发布,让大家共享这场技术盛筵. - 中生代技术嘉年华 - 张新波,同盾联合创始 ...

  4. 云原生高可用技术体系的构建

    简介:原来单一的技术环境开始走向分布式.分层的多组件技术架构,越来越多的组件使得保障业务稳定运行的工作也越来越艰巨.本文从容灾.容量.线上防护.演练四个维度全方位讲解如何构建一个真正的高可用体系. 伴 ...

  5. 从零构建知识图谱(技术、方法与案例)-第二章:知识图谱技术体系

    当前,人工智能技术的发展速度之快已经超出了所有人的想象,以至于总会有人不断将现有人工智能的表现与人类相比较.然而,在经过不同层面的对比之后,不难得出一个结论:尽管目前人工智能技术在一些特定任务上有比较 ...

  6. 游戏增长专题-构建游戏分析技术Game Analytic Pipeline与量江湖分享

    文章目录 亚马逊云科技游戏孵化营-游戏增长主题 从事数据分析的起因 加入游戏孵化营 构建游戏分析技术Game Analytic Pipeline 游戏公司的数据分析需求 需要收集的数据 游戏数据分类 ...

  7. 计算机应用实践教学体系,高职计算机应用技术专业实践教学体系构建-2019年精选文档...

    高职计算机应用技术专业实践教学体系构建-2019年精选文档 高职计算机应用技术专业实践教学体系构建 实践教学是高等学校实现培养人才目标的重要环节,它对提高学生的综合素质,培养学生的创新意识和创新能力, ...

  8. 游戏任务成就体系的实现(一):业务分析及技术架构

    游戏任务成就体系的实现(一):业务分析及技术架构 Hi,ALL:我是WJ,一名游戏服务端开发者,11年入行,主要集中在棋牌游戏领域.从今天开始会把我从业至今的一些积累通过CSDN博客分享给大家.欢迎各 ...

  9. Java开发人员如何构建自己的技术体系

    Java是现阶段中国互联网公司中,覆盖度最广的研发语言,掌握了Java技术体系,不管在成熟的大公司,快速发展的公司,还是创业阶段的公司,都能有立足之地.成为Java架构师除了掌握Java语法之外,还要 ...

最新文章

  1. 我猜你不知道知乎这么个大系统是咋部署的!
  2. LeetCode 3. Longest Substring Without Repeating Characters-- c++,java,python解法
  3. jsp截取字符串前几位_7. Python3轻食丨丛林里的野蛮生长:无处不在的字符串(一)
  4. Oracle NoLogging Append 方式减少批量insert的redo_size
  5. 疫情之下,这些公司开始给员工发菜了!
  6. php 运行环境 去mysql,php、MySql运行环境
  7. 循环控制_break语句
  8. 背账100万,不付利息不用还钱,银行套路好深
  9. 计算机图学测试题及答案,《计算机图形学》练习测试题及参考答案
  10. 错过后悔十年!计算机视觉入门到精通,学习书籍推荐
  11. vuejs之v-if-ajax异步请求数据遇到的坑
  12. 陈梓涵:关于编程的胡扯
  13. [书目20080630]人一生要养成的50个习惯
  14. SQL Server 游标
  15. 接力和隔空投送无效、handoff airdrop无效
  16. 【多线程】long和double的非原子性协定
  17. 如何制作一个简单的16位CPU
  18. win7打开网络无计算机,Win7电脑系统IPV6无网络访问权限解决方法
  19. IE和火狐的在js和css上的差别
  20. kotlin中mainactivity无法直接调用xml中的控件_个推TechDay广州站:使用Kotlin演进安卓开发生态...

热门文章

  1. iOS各种权限判断(相机,相册,定位,录音)
  2. 解决Windows不能显示隐藏文件的问题
  3. “国家重点实验室”完全名单_洹水泛舟_新浪博客 - Google Chrome
  4. 二元函数连续与偏导数存在的关系_怎样理解多元函数,连续与偏导存在的关系,偏导连续之间的关系...
  5. java web乱码及解决方法
  6. 航班动态查询api调用代码示例
  7. 龙芯1B:timer定时器例程
  8. Siri:赋予机器和米老鼠唐老鸭一样的个性化魅力
  9. wxWidgets自定义标题栏
  10. 深度学习和dqn_深度Q学习方面的改进:双重DQN决斗,优先体验重播和固定…