程序员如何学习做游戏?

文章目录

前几天一个创业朋友 Q 同学咨询我如何学习做游戏。这是个很普遍的问题,经常会有其他行业的程序员向我咨询转到游戏行业应该做什么准备,所以我把回答整理了一下,希望对大家有用。

Q 同学问

小弟最近有一个想法,想要做一个网页联网的2D(或者伪3D)大富翁游戏。主要目的是:

  • (1)增进一下技术,了解一下相关的技术栈。
  • (2)未来有在这个领域创业的想法。不想把技术钻的太深,未来产品可能会找外包团队,但是自己要懂一些,可以做技术管理。

我想要通过做这个网页联网2D(或者伪3D)大富翁游戏把下面的技术串一串,实践一下:

  • (1)网页游戏开发,框架,引擎。
  • (2)联网游戏的服务器同步机理。
  • (3)微服务,Docker(当然我不知道游戏服务器是不是在做这种微服务和伸缩设计)。
  • (4)即使不做游戏,想要复习一下快速构建网络·服务的过程,以及相关的工具链(以 NodeJs 工具链为主)。

我现在的技术栈大概是:python写得多,java,c++复习一下会写,Js曾经比较熟,sql二把刀。网站的话,自己带几个人开发过最普通的低并发业务网站,用的 Flask,Jinjia,Js,Reddit,阿里云,了解服务器端的简单开发(不涉及到大量中间件,复杂数据结构,对数据实效性基本上没有要求),运维了解一些。也用 Vue,Express,webpack 等做过业务网站。

由于我是第一次做游戏,所以我不敢自己贸然行动。我想要请大大帮我梳理一下整个学习,工程的行进路线,包括资料(书,网页,教程,文档),大概的技术方向(框架的选择,技术的选择,架构的选择等),每一步学习的大方向,每一步开发的大方向。有了这份指导,我再去学习相关的知识,我想一定可以事半功倍!


作为 SAGI GAMES 的创始人,我想先声明,如果你不爱游戏,不玩游戏,那么最好不要转行做游戏。是的,游戏行业钱多薪资高,但游戏行业也出了名的极难成功。你看到的成功项目,背后可能是上百次失败。如果没有对游戏本身的热爱,你很难坚持下来,更无法承受游戏开发过程中的不确定性,直到最终等到一个成功。

我的回答

Q,先聊一下你的问题吧。

以你目前的积累和学习能力,我认为自学游戏开发是肯定没有问题的。你希望得到一些指导,可能是因为这个领域从来没有接触过,自己心里有点虚(很正常的心理)。另外也如你所说,有一些指导可以少走弯路事半功倍。

但我相信你心中一定有自己的方法。

我这些年积累了一些学习的方法论,但并没有非常系统地写出来,现在正好是个机会,我来做一个简单的梳理。

下面是我写过的一些文章,可以先读一遍:

  • 如何学习一门新技术: 这篇比较新,很全面的讲解了我自己学习技术的方法论,可以仔细读一下。
  • 移动游戏客户端技能树: 这篇是我在带技术团队的的时候写的,主要针对的是游戏客户端技术,服务端技术有一些,但没有作为重点。
  • Python 入门建议: 这是我学习 Python 的时候写的一篇,你主要关注思想和方法论层面就好。
  • 如何学习 cocos2d-x ?: 我在学习 Cocos2d-x 时写的一篇,Cocos2d-x 是 Cocos Creator 之前的引擎,使用 C++ 开发。所以我当时把 C++ 重学了一遍,但主要还是写 Lua。 这篇文章中提到了 OpenGL 的部分,是游戏客户端的核心(当然不学OpenGL也可以做出好游戏的)。
  • 真正的程序员应该能自己解决问题: 这篇是我之前在一个论坛中的讨论记录,能代表我在技术学习上的思维方式。

你可能注意到了,上面我提供的都是「渔」而非「鱼」。因为我认为,到了你这种高度的学习者,提供「渔」的效率更高。你有自己的学习方法论,直接给你「鱼」,反而会影响你的学习效率。

我在 如何学习一门新技术 一文中提到技术的定义: 可以通过现有资料进行全面掌握的解决实际问题的知识与能力。

从上面的定义可以看出,由于技术解决的是 实际问题,不可避免地,技术会根据现状的变化出现过时的情况。由于可以 通过现有资料全面掌握, 时效性就显得尤为重要。

所以,我给你太多「鱼」,就是太多余。

为了让你能减少试错成本,下面就是必要的「鱼」的内容。

首先是开发引擎选择。

Python 目前你很熟悉,基于 Python 的游戏引擎是有的,但我不推荐。基于 C++/JAVA 的我更不推荐。

我推荐两个引擎: Cocos Createor (CCC)和 Unity。

CCC 是国产软件,国内三大 H5 引擎之一。CCC 可以开发 2D 和 3D(目前较弱) 游戏,使用 JS 或者 TS 开发,产品可以发布到微信等小游戏平台,可以作为 H5 页面发布,也可以打包成安卓或者 iOS 原生应用程序。

Unity 是市场占有率超过 50% 的游戏引擎。可以开发 3D 和 2D 游戏,使用 C# 开发,也有社区支持的 Lua 版本。面向安卓/iOS/PC/主机平台。

至于你应该选什么,主要应该基于市场和平台考虑。我的建议如下:

  • 如果你想快速试错,前期希望用 2D 游戏练手,建议先用 CCC。平台建议选择微信小游戏平台,可快速上架面向用户,流程简单顺畅。当然你也可以直接基于 H5 来发布。
  • 如果你想做 3D 游戏,面向 AppStore 或者安卓市场,就应该从 Unity 上手。
  • 其他的引擎,无论如何都不建议你用。等把这两个引擎吃透了再去看其他引擎的源码就行了。
  • Unreal 更是千万不要碰。你现在需要的是 DEMO。

根据你的前面的描述,2D 或者伪 3D,网页,相信你已经有选择了。

其次是书籍的选择。

引擎学习的部分,直接看官方文档就好了。不需要买什么书。买了也是浪费钱。

如果想深度钻研一下技术,可以看这几本:

设计的部分,看这几本:

需要注意的是,对于游戏开发初学者来说,设计的部分应该远远比技术的部分重要。 但遗憾的是绝大部分初学者往往认为是反过来的。

代码再漂亮,也拼不出一个好游戏。

另外,你并非一定要看完上面的书才能开始动手写游戏。实际上,我建议你看完引擎文档就开始动手设计游戏。

上面的书,只是告诉你,当你期望向上一部分的时候,方向就在那里, 不要走错路。

最后,讲一下我认同的个人游戏开发方法论。

DEMO 阶段,奉行拿来主义,能去买的素材就不要自己画,能拿来主义的地方就不要自己造轮子。

最小化原则作品,先把作品 run 起来,比优雅的代码,整洁的界面,完善的设计带给你的信心要大很多很多很多很多倍。

DEMO 出来了之后就要立即找到受众测试。游戏是做给别人玩的,不是做给你自己欣赏的。只有别人(除你之外的所有人)喜欢玩的游戏才是好游戏。

游戏不是艺术,游戏是娱乐。

等你做出一个成功的娱乐游戏之后,再来考虑艺术的事情。

全文完