Note

程序是什么

策划让游戏变得好玩,美术让游戏具有灵魂,程序让游戏成为可能。没有他们,游戏设计和美术设计都只是无法拼凑在一起的碎片。他们用干净整洁的代码与计算机交谈,编写出世界运行的逻辑。

程序是其中最简单的最容易上手的,因为只要具有编程能力,掌握了一款游戏引擎后,即使其他什么都不懂,也已经能够做出简单的游戏demo了。

程序是连接游戏世界和玩家的桥梁,负责游戏世界的运作以及与玩家的交互。程序将所有的资源、功能以及效果关联起来,在数字与逻辑的海洋中,将游戏世界呈现给玩家。

程序需要做什么

主框架

搭建游戏程序的整体框架,确定游戏程序的底层引擎,是整个游戏程序的根基。

客户端

直接与玩家进行交互的程序,需要接受玩家输入的命令,进行处理,与服务端进行通信,将游戏画面呈现给玩家。

客户端直接决定了玩家的游戏体验,需要有高效的算法,美观的界面,良好的交互方式等。

服务器

一般只有网络游戏需要服务器。

服务器接受客户端的请求,进行处理,然后发送给其他客户端,或者对数据库进行操作。

服务器需要有较高的性能,来应对并发的用户指令,并且及时反馈,以此给玩家带来良好的游戏体验。

除此以外,还需要具有一定的容错机制,来应对突发状况,例如流量激增,断电,黑客入侵等等。

服务器的好坏也决定了玩家的游戏体验(别用土豆做服务器就行)

程序开发阶段

不是每个阶段都需要程序的加入,比如概念阶段、推广阶段等,下面是一些可能需要程序参与的阶段。由于笔者没有真正参与过完整的游戏开发流程,所以来源于互联网上人们的描述,不一定很全、不一定很准确。

初步开发

此阶段在立项之后进行,一般需要做一些核心的机制系统,将策划的想法初步实现,完整整个游戏的雏形。

初期还需要进行一些规格确定,例如引擎或语言的选择,构建好基本框架,这些在游戏开发中后期都很难再进行更改了,因此在确定前需要认真考虑,结合需求和具体的条件进行周密的讨论。

开发中期

将美术等素材全都集合到一起,一步一步完善游戏本体。

完善游戏系统,将各个零散的关卡、机制整合起来,完成一个相对完整的游戏。

开发末期

这个时候已经能够推出beta测试版,绝大多数素材已经植入,绝大多数系统能够正常运行。内容之间能够连接起来。

为关卡或任务植入所有素材。

将关卡或任务联系起来,修复故事及技术问题。

从宏观上,检查整个游戏,例如整个游戏的节奏,玩家体验等等。

除此以外,准备发布工作,后期更新维护等。

程序学习路线

先修知识

游戏程序也是程序的一种,同样有必要先学习一些计算机先修课程,例如数据结构,操作系统,计算机网络,计算机组成原理,C语言程序设计等。

虽然可能在今后的工作中可能不会直接用到这些知识,但是这些知识对理解游戏运行机制,优化游戏代码算法等还是有一定的帮助。

编程语言

编程语言是程序很重要的一环,很多游戏引擎都需要有相关的编程语言基础。

大多游戏引擎使用的都是脚本语言。脚本语言是做什么的呢?就是给计算机发出指令,让它什么时候做什么事情。

不同平台的编程语言也有所不同。

如果你想从事移动平台的游戏开发,Android主流JAVA语言,iOS主流Object-C语言,那么你就要去学习这个平台主流的语言,而在个人主机上主流的游戏开发语言现在包括以后很长时间也还是C++。

但是并不是所不同平台的游戏开发,就毫无共通之处,学了这个到了另一个平台就无用了。不是这样的,编程的世界里你走得越远你会发现很多东西的本质都是相似的,例如你如果扎实地理解了C++的基本语法(而不是死记硬背),日后再转Java语言也不是很难的事情,因为它们本质的面向对象特性还有各种编程语言特性都是相通的。

游戏引擎

游戏引擎中集合了开发一个游戏所需要的大部分工具、组件、环境等内容。就像拍一部电影,我们需要摄像机、摇臂、灯光、挑干等基础工具。做游戏也需要摄像机、灯光、地形、人物控制器等组件,游戏引擎里面就包括了许多这些基础内容。掌握游戏引擎,使我们不用重头开始造轮子,而是直接拿现成的轮子来组装车。而组装车的过程中,需要用C#语言来告诉Unity,我哪个槽位放哪个轮子。

因为不同平台下的性能不同,支持的编程语言也不尽相同,所以针对不同平台下的流行的游戏引擎也是不同的(方括号里面是特别推荐的,基于开源性、易用性、性能与效果等方面的综合水平推荐):

  • windows或游戏主机:【Unreal】、寒霜、CE3
  • 苹果ios:【unity3D】、【cocos2d-ObjC】、【Unreal】、sparrow、sprite kit。
  • 安卓:【unity3d】、【cocos2d-x】、【Unreal】、AndEngine、libgdx。
  • 网页:【Egret】、【cocos2d-html5】、Fancy3D、unity3d。

在选择游戏引擎的时候,尽可能选用流行的游戏引擎,因为这个游戏引擎流行意味着官方的功能比较完善和易用,问答社区也比较多人解疑。各个游戏引擎也各有千秋,Unity3d胜在简单易用,对性能要求不高,但是效果不够华丽,因而一般用在移动平台而不会用在电脑或游戏主机。Unreal胜在开源免费,而且效果也很出色,但是对设备要求比较高,因而常常用来开发效果绚丽的大型游戏。cocos2d-x也是开源免费的,在2D领域深有造诣,但是缺点是不可视化开发。另外,如果你想了解游戏引擎原理,那么首要考虑的就是开源的游戏引擎。

不同游戏引擎使用的编程语言或者脚本语言可能是不一样的,所以当你想要学习某个游戏引擎的时候,也应该留意该游戏引擎所使用的语言。大部分情况是,Windows用的的是C++,同时结合lua或python脚本语言。而ios平台下使用Objective-C或swift,安卓平台下使用Java。但这不是必然的,例如Unity在各个平台下都可以用C#或者javascript脚本语言。

深入学习

熟练掌握游戏引擎后,已经可以完成一个完整而且还不错的游戏了,但是如果要进一步提升,可能需要深入了解游戏引擎原理。

这就要涉及计算机更底层的东西了。

因为游戏开发就是一门实时渲染的艺术,所以离不开图形库的学习。现在主流的图形库是Windows平台专用的DirectX 11和通用平台的Opengl。这两个图形库,至少需要入门其中一个。

然后,你就可以开始看计算机图形学的书籍了。如果你发现你的理论底子不足,这个时候就需要补一下线性代数、基本的微积分、还有3D数学的知识。

游戏引擎中包含了各个部分,上面的渲染只是游戏引擎的一部分。还有其它诸如着色器编写、地形编写、物理引擎编写、模型和动画、人工智能体设计、网络编程等等,完成渲染部分的基本学习后,你可以选择自己感兴趣的部分进行专攻,毕竟我们实际工作大多数时候是团队开发,而不是单打独斗,每个人都应该精通自己所擅长的那部分。