游戏程序员入门指北

在2013年以前,大家所熟知的游戏行业是端游时代,以天龙八部,梦幻西游,魔兽世界的时代,这个时代,大厂都在做端游,一做就是好几年,虽然游戏那么多,但成功的也就那么几款,剑网3,大话,梦幻,天龙,天下,DNF等。
随着智能手机的普及,手机的作用越来越大,只能手机开始有部分游戏出现,早起手游的还是一些小额的短信付费,在2013年手游行业出现井喷现象,在那个时间,只要是做手游做上线都会赚一大笔,当时出现了很多月流水过千万的游戏,很多原来居民楼里的团队开始,搬进了高大上的写字楼,各种土豪游戏公司相继出现,早期比较有代表作的有
1.捕鱼达人:街机改编,最高月流水达8000万
2.我叫mt:魔兽世界动漫改编 月流水上亿
3.时空猎人:银汉科技研发了好几款,都号称月流水5000万。等
很多小公司因为一款游戏给公司带来大量的收入,一时间好多团队都开始做手游,到2014年全国有好几万个研发团队,只要是个公司都想做游戏,世面上出现了大量的游戏作品,手游行业从蓝海到红海,2015年下旬到现在行业开始变得冷静。
我本人在14年初加入游戏行业,从业两年多,期间参与两款手游作品的客户端研发,一款算凑合,月流水最高到1800万。16年初离开游戏行业,呆了两年多也算有点认识。虽然我已经离开游戏行业已经半年了,因为经历比较坑爹觉得太苦逼就没做游戏了,回头看当时的离开游戏行业的确太唐突了。目前来看,个人感觉手游项目的成功率还是比app创业要大一点,毕竟手游周期短,遇到靠谱的团队的话,利润还是有的保障的。
很多男同学都喜欢玩游戏,很多都有过做游戏的念头,尤其学计算机的都觉得游戏挺有意思的,想去做游戏,把自己的游戏想法实现出来。
首先我泼盆冷水:做游戏和玩游戏是不一样的,完全不一样的体验,对不是特别喜欢游戏,只是偶然入行的同学来说,真的很苦逼。。。各种加班,发版本有时候还得通宵。

客户端开发

游戏客户端主要实现一些游戏效果,偏用户表现的实现,比如UI,战斗表现,场景构建等,游戏客户端需要和游戏美术配合,根据美术提供的材质资源等,实现特定的用户展现。客户端开发都是基于成熟的引擎做开发,引擎的作用就是封装了底层opengl,渲染的实现细节,封装抽象。

早期的游戏是大多是2d游戏,开源的cocos2dx是大多数人的选择,当时cocos2dx人才万金难求。。如今随着大厂纷纷加入,竞争激烈,2d游戏很难在玩法上继续创新,开始比拼画质,动作,场景等,如今3D成为主流,2d的需求特别少,大厂几乎不招2d的了,cocos2dx引擎本身的也有很多问题,如果要选择做游戏客户端,学习C++,虽然如今大部分客户端都是在写lua脚本,但C++这些基本工都是面试必须的,以及后期的深入研究客户端,需要涉及opengl渲染的,所以C++作为游戏客户端是必备技能,此外数据结构和算法是程序员必备。目前引擎选择,可选的只有unity3d和unreal,unity3d在可预见的未来应该还会是主流引擎,unreal市场份额会扩大,但学习成本高,目前用的不是特别多。
至于unity3d的学习,知乎上有很多讨论,如果我在校生,我还是建议多注重计算机基础,可以去学习下cocos2dx,看一下源码,unity3d是闭源的,很容易上手,它的学习,就需要很多的思考其背后的实现。

在实际的项目开发中,会有一个前端主程,主要搭建客户端的架构,比如UI架构,时间通知,定义资源规范,其他人则负责具体的游戏逻辑开发,游戏中比较复杂就是战斗逻辑会涉及到一些状态机和ai,以及地图场景渲染,需要一些3d渲染方面的知识,初期可以从逻辑入手,游戏开发比较无趣的一点就是工作中会涉及到大量的游戏逻辑,没重开一个项目,这些逻辑都需要重写一遍,当然有很多游戏都是换个美术代码稍微改改。而这些大量的游戏逻辑实际上对能力的提升,个人感觉有限,逻辑程序员没有未来,所以如果真的要往游戏客户端发展,必须要深入游戏核心,比如场景渲染,内存优化,项目架构等。unity的开发语言是C#和lua,所以要往深的做,就需要理解gc,这也是程序员的进阶知识。

游戏客户端的技术变化还是比较快的,2年前还是cocos2dx的天下,如今cocos已经快被淘汰了,所以还是要把握好技术方向,随时调整。我最初就是搞cocos2dx的。页游的as到cocos2dx,这才几年都被淘汰了。。。 最后补充一点,游戏客户端的技术真的只能应用于游戏行业,如果要换行业,你的游戏行业积累几乎没用了,所以入行要谨慎,很多人做游戏真的是一辈子了。这种人才能真的做出成果。

游戏服务器

游戏服务器从端游时代,经历了页游时代到手游,服务器技术一直没有发生大的变化,其中部分原因是需求也没有发生大的变化,开发语言从早期只有C++到现在手游服务器各种语言都有,较多的是C++,java,php,go还有C++结合lua,其中java的居多。现在很多公司都拥有一套自己的服务器框架,每个项目都是在原来框架上改改,一般长期都不会改变,游戏行业来对技术的要求不是特别高,追求的快速迭代和上线,赚钱然后继续开新项目。

我做了一年多游戏客户端,其实我对服务器更感兴趣,服务器会涉及到网络编程,游戏一般都是socket长连接,少部分轻度的游戏是基于短连接http的,游戏服务器和web服务器的区别在于,游戏要求低延迟,游戏服务器有着大量的交互和数据同步,就那游戏场景来说,场景中每个玩家的动作都需要同步给所有该场景的其他玩家,每时每刻都是有大量的数据同步。服务器架构和web服务器还是有一定的区别,目前游戏服务器技术普遍比较落后,互联网行业的很多新的成熟工具或框架都在游戏行业还没得到大量应用,很多公司都追求稳定,还保留着一些旧的代码。游戏服务器相对于客户端来说相对比较稳定,不会出现大的技术变动,无论3d还是2d对服务器来说,没啥区别,和客户端同样的问题,游戏都是需要写大量的游戏逻辑,但个人感觉服务器还是比较注重架构设计的,如果考虑到中途可能会转行建议做游戏服务器,和web后端还是有一定的想通性,不过业务知识就比较尴尬了。
目前游戏服务器开发集技术也都比较成熟,唯一的却别可能会根据不同的游戏类型,做一些改动,使之能更适应具体项目的开发,不同项目可能会采取不同的同步方式,例如mmorpg和射击类的服务器架构就有很大区别。游戏服务器的学习入门就只能从网络编程学起,学习部分linux,学习一些开源的游戏服务器架构。

最后,游戏开发的只适合那些真正热爱游戏的人,任何一个行业,努力的学习几年都会超过大部分人,职业路线步入工作岗位一定要规划好,中途的转行都是损失,希望大家都能按着自己规划一直走下去。作为程序员一定要求比较solid的专业知识,网络,操作系统,数据结构等,不要仅限于某一个具体的技术上,共勉。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,173评论 25 709
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,324评论 19 139
  • 管理技巧 警告:Kubernetes 对象应该只使用一种技术进行管理。混合使用不同的技术,会导致相同对象出现未定义...
    liuzg0734阅读 7,156评论 0 0