游戏编程Learning Game Development

Learning Game Development

2017-03-10  本文已影响452人  蔡子聪

This article is a record of my journey to learn Game Development and it will keep updating.


由于这篇文章的长度早已超出了简书编辑器的限制,因此后续内容将不在本文中更新,请移步本人的独立博客 caizicong.com 阅读更多内容。

本文原始链接


这里记载了我零基础学习游戏开发的过程。

我从 2017 年 1 月开始自学游戏开发,在此之前并无任何游戏开发经验,但有三年使用 Java 进行 Web 和大数据系统开发的经历,在大学期间也学习过 C、C++ 和 C# 编程课程。即便如此,游戏开发所涉及的庞大知识体系仍然给初学者带来了巨大挑战。面对全新的知识领域,我决定将每天学习过程中的知识要点记录下来以供回顾。不过这篇文章更像是一个索引,因为一些篇幅过长的详细的专题内容不会都放到这篇文章中,而是以链接的形式存在。总之,我会持续记录和更新,看看这些有趣的知识将把我带向何方。: )


Phase 1:认识 Unity

笔记:https://github.com/Caizc/cai-knowledge-base
参考:《VR开发实战》

Phase 2:三维空间的数学基础

空间数学的基本概念:

矢量运算:

三角函数

笔记:https://github.com/Caizc/cai-knowledge-base
参考:《VR开发实战》

Phase 3:VR Hello World

笔记:https://github.com/Caizc/cai-knowledge-base
参考:《VR开发实战》

Phase 4:简单的解谜游戏

源码:https://github.com/Caizc/learn-puzzle
笔记:https://github.com/Caizc/cai-knowledge-base
参考:《VR开发实战》

Phase 5:第一人称射击游戏

要点:

源码:https://github.com/Caizc/learn-fps
笔记:https://github.com/Caizc/cai-knowledge-base
参考:《VR开发实战》

Phase 6:旅游观光应用

未解决的 bug :

要点:

源码:https://github.com/Caizc/learn-tourism
笔记:https://github.com/Caizc/cai-knowledge-base
参考:《VR开发实战》

Phase 7:将单机版的第一人称射击游戏改造成联机游戏

未解决的 bug :

笔记:https://github.com/Caizc/cai-knowledge-base
参考:《VR开发实战》

Phase 8:了解 Cardboard 开发、Oculus 开发和 MR 视频拍摄

阅读 Cardboard 开发、Oculus 开发和 MR 视频拍摄的入门知识,由于无相应硬件设备,暂时不做更深入的了解。

参考:《VR开发实战》

Phase 9:实现键鼠操控玩家对象在 3D 空间中自由移动

要点:

源码:https://github.com/Caizc/learn-fps-play-with-km
参考:《Unity in Action: Multiplatform Game Development in C# with Unity 5》

Phase 10:为 FPS 游戏实现玩家射击和具有简单 AI 的敌人

源码:https://github.com/Caizc/learn-fps-play-with-km
参考:《Unity in Action: Multiplatform Game Development in C# with Unity 5》

Phase 11:为 FPS 游戏开发图形

源码:https://github.com/Caizc/learn-fps-play-with-km
参考:《Unity in Action: Multiplatform Game Development in C# with Unity 5》

Phase 12:2D 记忆力游戏

源码:https://github.com/Caizc/learn-memory-game-2d
参考:《Unity in Action: Multiplatform Game Development in C# with Unity 5》

Phase 13:为 3D 游戏创建 2D 的 GUI

源码:https://github.com/Caizc/learn-fps-play-with-km
参考:《Unity in Action: Multiplatform Game Development in C# with Unity 5》

Phase 14:实现第三人称 3D 游戏中玩家的移动和动画

源码:https://github.com/Caizc/learn-third-person-view-game
参考:《Unity in Action: Multiplatform Game Development in C# with Unity 5》

Phase 15:在游戏中添加交互设施和物品

源码:https://github.com/Caizc/learn-third-person-view-game
参考:《Unity in Action: Multiplatform Game Development in C# with Unity 5》

Phase 16:将游戏连接到互联网

源码:https://github.com/Caizc/learn-online-game
参考:《Unity in Action: Multiplatform Game Development in C# with Unity 5》

Phase 17:为游戏添加音效和音乐

源码:https://github.com/Caizc/learn-fps-play-with-km
参考:《Unity in Action: Multiplatform Game Development in C# with Unity 5》

Phase 18:简单但功能完整的 RPG 游戏

整合其他项目所学的内容,创建一个功能完整的角色扮演游戏,游戏主要功能如下:

源码:https://github.com/Caizc/learn-rpg
参考:《Unity in Action: Multiplatform Game Development in C# with Unity 5》

Phase 19:针对不同的游戏平台构建游戏

参考:《Unity in Action: Multiplatform Game Development in C# with Unity 5》

Phase 20:Roll a Ball

要点:

参考:Roll-a-Ball tutorial - Unity-Learn-Tutorials

Phase 21:Space Shooter(项目设置,初始化场景设置和玩家对象)

Space Shooter 是一款街机风格的竖版射击游戏,玩家可以发射激光炮弹摧毁前方滚落的陨石和狡猾的敌人。

Space Shooter 游戏试玩链接:
http://caizicong.com/timecapsule/gamesdir/space_shooter/index.html
(在 PC/MAC 上使用 Chrome、Safari 或 Firefox 浏览器打开运行,游戏文件大小 9M,加载过程需 1-3 分钟,Have Fun!)

源码:https://github.com/Caizc/game-space-shooter
参考:Space Shooter tutorial - Unity-Learn-Tutorials

Phase 22:Space Shooter(玩家移动、攻击,游戏边界、障碍物,粒子系统,游戏控制器)

要点:

源码:https://github.com/Caizc/game-space-shooter
参考:Space Shooter tutorial - Unity-Learn-Tutorials

Phase 23:Space Shooter(音效和背景音乐,玩家得分和游戏重玩,构建游戏)

要点:

源码:https://github.com/Caizc/game-space-shooter
参考:Space Shooter tutorial - Unity-Learn-Tutorials

Phase 24:Space Shooter(滚动背景,不同类型的障碍物,简单 AI 的敌人)

要点:

源码:https://github.com/Caizc/game-space-shooter
参考:Space Shooter tutorial - Unity-Learn-Tutorials

Phase 25:Survival Shooter(环境设置,玩家角色,摄像头,敌人)

Survival Shooter 是一款第三人称生存射击游戏。游戏的玩家主角是一个身陷噩梦的小男孩,发现自己房间中所有的布偶都变成了行尸走肉,它们蜂拥着追逐玩家,玩家只有通过一把能够发射激光的玩具枪击退一波又一波的敌人,让自己生存下去。

Survival Shooter 游戏试玩链接:
http://caizicong.com/timecapsule/gamesdir/survival_shooter/index.html
(在 PC/MAC 上使用 Chrome、Safari 或 Firefox 浏览器打开运行,游戏文件大小 49M,加载过程需 5-10 分钟,Have Fun!)

要点:

源码:https://github.com/Caizc/game-survival-shooter
参考:Survival Shooter tutorial - Unity-Learn-Tutorials

Phase 26:Survival Shooter(玩家血量 GUI,敌人攻击和玩家攻击行为)

要点:

源码:https://github.com/Caizc/game-survival-shooter
参考:Survival Shooter tutorial - Unity-Learn-Tutorials

Phase 27:Survival Shooter(玩家得分,自动刷怪,游戏重玩)

要点:

源码:https://github.com/Caizc/game-survival-shooter
参考:Survival Shooter tutorial - Unity-Learn-Tutorials

Phase 28:Survival Shooter(Audio Mixer)

要点:

源码:https://github.com/Caizc/game-survival-shooter
参考:Survival Shooter tutorial - Unity-Learn-Tutorials

Phase 29:Game Development Principles

《游戏开发原理》总体来说是一本适合初学者入门游戏开发的概论,内容涵盖了游戏开发的方方面面,但也注定其对于所有主题都是点到即止。对于帮助初学者建立起对游戏开发的整体认知的目的已经达到了,所以还算是本好书。但是原作让不走心的翻译毁了八成,强烈怀疑译者用的 Google 翻译翻成的中文译本就拿来出版。

全书目录如下:

笔记:https://github.com/Caizc/cai-knowledge-base
参考:《Game Development Principles》(《游戏开发原理》)

Phase 30:Zombie Toys for PC&Web

Zombie Toys 是 Survival Shooter 游戏的延伸,增加了新的游戏玩法,丰富了游戏体验,优化了视觉效果。新增特性包括:

Zombie Toys 游戏试玩链接:
http://caizicong.com/timecapsule/gamesdir/zombie_toys/index.html
(在 PC/MAC 上使用 Chrome、Safari 或 Firefox 浏览器打开运行,游戏文件大小 52M,加载过程需 5-10 分钟,Have Fun!)

Zombie Toys PC 版下载地址:
http://blog-1252720346.cosgz.myqcloud.com/games/zombietoys/ZombieToys-by-ZicongCai.zip
(下载解压后直接运行 ZombieToys.exe 即可,游戏文件大小 70M,Have Fun!)

要点:

源码:https://github.com/Caizc/game-zombie-toys
参考:Unity Certified Developer Courseware - Unity Asset Store

Phase 31:游戏系统设计指南

「三思而后行」,在游戏制作的工业流程中,策划设计处于编码实现的上游,全面地了解一个游戏从策划、到实现、再到发布运营的全过程,有利于建立起对游戏开发工作的全局视野,把握游戏开发工作中的核心要点。

技术是服务于业务的,底层技术实现的是上层业务逻辑。因此,对于游戏开发人员来说,了解游戏策划相关的知识,有利于在设计游戏系统技术架构时,充分考虑到游戏业务逻辑的多样性和不稳定性对底层技术所带来的挑战;有利于启发游戏开发人员对于系统稳定性与可扩展性的思考。

腾讯 GAD 编撰的这本《创世学说:游戏系统设计指南》,面向新手游戏系统策划人员,通俗易懂地讲述了游戏系统相关的知识。阅读这本书,有助于读者实现从游戏玩家视角到游戏制作人员视角的转变,建立起对游戏工业流水线的基础认知。

笔记:https://github.com/Caizc/cai-knowledge-base
参考:《创世学说:游戏系统设计指南》

Phase 32:2D 手机游戏

《Unity 5.x 创造 2D 手机游戏》以一个简单的 2D 横版跑酷游戏为例,带领读者一步步构建自己的第一个 2D 游戏项目,适合刚入门手机游戏开发的新手。

虽说作为贯穿全书的游戏项目较为简单,但麻雀虽小五脏俱全,其中涉及到的游戏编程思想在实际项目开发中也很重要,特别是游戏内存的使用优化、对象池、代理模式等知识,对于优化游戏性能、提高游戏代码架构的可扩展性有很大帮助。

同时,书中也存在一些纰漏,阅读时需注意:

要点:

GetComponent() 方法无法获取抽象类的引用,所以只能通过手动遍历游戏对象的组件列表来获取抽象类的引用。

https://docs.unity3d.com/Manual/UICanvas.html

https://docs.unity3d.com/Manual/script-CanvasScaler.html

Standard TimeSpan Format Strings - Microsoft Docs

https://docs.unity3d.com/ScriptReference/PlayerPrefs.html

源码:https://github.com/Caizc/game-endless-running
笔记:https://github.com/Caizc/cai-knowledge-base
参考:《Unity 5.x 创造 2D 手机游戏》

Phase 33:Programming in Lua

Lua 作为一种可嵌入,轻量快速,功能强大的脚本语言,在游戏开发领域主要用于功能原型的快速开发、嵌入其他语言框架以提供灵活的可扩展性,或者作为游戏热更新能力的有力工具。

要点:

笔记:https://github.com/Caizc/cai-knowledge-base
参考:《Programming in Lua》

Phase 34:CraftStudio 游戏引擎

CraftStudio 是一款非常小巧的游戏引擎(安装包大小仅 11M),免费,支持主机平台的 2D/3D 游戏制作。用它来制作像素风格的小游戏特别得心应手,从建模、动画、场景、脚本到音频一应俱全,最具特色的是其提供了多人在线实时协作的支持。采用可视化拖拽式脚本编程和 Lua 脚本编程,易于上手。如此小巧精炼的一款引擎,让开发者回归到游戏开发的核心本质,值得一试。

CraftStudio 工作界面:

可视化拖拽式脚本编程:

Lua 脚本编程:

游戏效果:

CraftStudio 的下载页面:https://sparklinlabs.itch.io/craftstudio
CraftStudio 的 Wiki 页面:https://bitbucket.org/sparklinlabs/craftstud.io/wiki/Home

Phase 35:Programming in CSharp

全面快速地回顾了 C# 语言的全部内容,期待在项目实战中持续深入。

笔记:https://github.com/Caizc/cai-knowledge-base
参考:C# 教程 - RUNOOB.COM

Phase 36:Mobile & Touch

//TODO: 未完成学习
Unite Europe 2016 - Optimizing Mobile Applications

参考:Mobile & Touch - Unity Tutorials

Phase 37:2D Roguelike

// TODO: 项目编码未完成

2D Roguelike

要点:

源码:https://github.com/Caizc/game-2d-roguelike
参考:2D Roguelike tutorial - Unity Tutorials

Phase 38:Useful Stuff in Unity Scripting

在学习和实践的过程中,同步将 Unity 游戏脚本编程中常用的 API 及实用技巧整理出来,并持续更新这些知识点,为打好基础以做到熟练运用引擎工具来构建游戏提供帮助。

笔记:https://github.com/Caizc/cai-knowledge-base

Phase 39:Design Patterns in Game Development

学习《设计模式与游戏完美开发》一书,学习如何将设计模式灵活应用于游戏编程中。

游戏系统架构和逻辑设计的过程中重要的几种 UML 图:

//TODO: 已完成前 6 篇(1-20 章)内容的学习,并绘制了系统类图,剩余章节待学习。

笔记:https://github.com/Caizc/cai-knowledge-base

Phase 40:Playmaker

简单了解了 Unity 的一款可视化编程插件 —— Playmaker,看完了官方的入门系列教程。

Playmaker 的核心是一个 Finite State Machine (FSM) 有限状态机,通过「事件驱动」实现状态跳转,同时添加了功能强大的 Action、Variable、Event 实体等,试图部分取代 Unity 传统脚本编程的功能,用易于上手且相对灵活的方式实现游戏的玩法逻辑。

对于将 Playmaker 应用于项目开发中的评价褒贬不一,不过对于游戏开发新手或者快速实现游戏原型来说,Playmaker 是便捷之选。而对于上了体量的商业项目来说,游戏系统规模膨胀以后,使用 Playmaker 的项目管理起来可能是个噩梦。

不过,对于 INSIDE 这款游戏使用了 Playmaker 进行制作还是挺让人惊讶的,不知道它对于这个插件的使用规模如何。

参考:
简单易用的可视化编程插件 Playmaker
Core Concepts of Playmaker
TUTORIALS - Playmaker
Should you use Playmaker in production?

Phase 41:Corgi Engine

Corgi Engine 是以 Unity 插件形式实现的一款 2D + 2.5D 平台游戏(Platformer)开发套件,其中包含了实现一款平台跳跃游戏所需的角色、道具、场景组件等,具有完善的文档、教程支持,其项目源码也非常规范整洁,值得研究学习。

Corgi Engine - the Best 2D + 2.5D Platformer Solution for Unity

为了方便查阅和加深理解,我索性将 Corgi Engine 的官方文档全部翻译为简体中文,详细信息可以访问这篇博客文章进行了解:

Unity 2D 平台游戏套件 Corgi Engine 中文文档

项目地址:Corgi Engine 简体中文文档

Phase 42:Mecanim 动画系统

我发现在使用 Unity 进行游戏开发的过程中,如果遇到不懂的地方,Unity Manual 往往是最权威的一份学习材料,第一时间阅读它来查找你想要的答案是最快捷的方式。

虽然之前做过的项目中多多少少用到了 Unity 的动画系统,但还是有很多地方一知半解,于是决心从官方手册开始全面学习 Unity 的动画系统 Mecanim

Animation - Unity Manual

学习如何实现角色的「换皮」,即重用角色的动画状态机、动画和骨骼,利用 Unity 的 Avatar 机制可以实现。

Mecanim 动画系统相关资料:

骨骼与动画重定向 - 知乎专栏
這樣條動作絕對錯不了! Animator系統介紹! - Youtube
免费的 3D 模型制作和下载网站 - mixamo

Phase 43:xLua & Google Protocol Buffers

源码:xLua 整合 pbc 库项目(编/解码测试通过)

Phase 44:网络编程

网络游戏离不开网络编程。

为了寻找适合中小型项目的网络通信模块,深入了解了几个基于 Socket 实现的网络通信框架,其中有出自书籍《Unity 5.x 3D 游戏开发技术详解与典型案例》和《Unity 3D 网络游戏实战》的简单案例,也有开源的应用于实际项目中的框架,如 cocosocketKBEngine

最后还学习了 Unity 自带的 UNet,以及成熟商用的网络引擎 Photon

各个框架简单的分析对比记录在这里:
Network Frameworks work with Unity

笔记:https://github.com/Caizc/cai-knowledge-base
参考:
《Unity 5.x 3D 游戏开发技术详解与典型案例》
《Unity 3D 网络游戏实战》

Phase 45:Java 服务端程序搭建

为了调试游戏客户端的网络模块,需要有相应的服务端程序来处理请求,为此又「重操旧业」,在腾讯云上搭建起了 Java Web Application

还顺便学习了 Docker 的搭建与使用,以及 Docker 中 MySQL 容器的使用。

另外还入手了 IntelliJ IDEA,可以说非常趁手,Java 程序开发效率倍增。随后学习使用 Maven 管理项目依赖,并用它顺利集成了 Protobuf 3,以便与游戏客户端联调网络通信协议功能。

源码:rapid-server
笔记:
CentOS 搭建 Docker 环境教程
Docker Tips

Phase 46:网络游戏同步技术

网络游戏的同步是一个大课题,目前应用较为广泛的同步方案主要有状态同步帧同步,以及两者混用的方式。当然,无论采用哪种方案,核心都是借鉴方案中实现游戏同步的思路,然后根据项目的需要来调整具体的实现细节,最终达到各客户端流畅一致的游戏体验。

Network Programming in Game Development 这份笔记中,记录了网络游戏同步相关的技术要点,以及几种主流方案的简要总结。

随后对 Lockstep Synchronization 帧锁定同步 方案进行了深入研究,总结了该方案的技术要点,绘制了算法的流程图(在 learn-photon-truesync 项目中可以找到)。最后对 Photon 网络引擎的 TrueSync 帧锁定同步组件进行深入剖析,解析源码并绘制了系统类图。

初步完成对网络游戏同步技术的调研后,接下来将尝试自己实现一个网络游戏同步框架(包括客户端和服务端程序)。

源码:learn-photon-truesync
笔记:
Network Programming in Game Development - 游戏开发中的网络编程
Lockstep Synchronization - 帧同步
参考:TRUESYNC - Photon

Phase 47:Unity Certified Developer Courseware

在 9 月份「开学季」官方促销时订阅了一年 Unity Plus,同时获得了 Unity 认证开发者课程为期 3 个月的访问权限,虽然之前已经深入学习过 Zombie Toys 项目的代码实现,但课程中除脚本编程以外的内容,还是非常值得学习的。

课程中对于使用 Unity 进行游戏开发涉及的各方面技术都进行了讲解,虽然没办法探讨得很深入,但对于新手一览游戏开发全貌还是很有帮助的。藉着学习该课程的过程,我也对 Unity 的基础知识进行了查漏补缺,特别是 3D/2D 资源制作与导入、光照、导航寻路等模块,扫除了不少知识盲点,获益颇丰。

课程中的知识要点整理在 Best Practices for Unity 这份文档中。

笔记:
Best Practices for Unity
https://github.com/Caizc/cai-knowledge-base
参考:Unity Certified Developer Courseware

Phase 48

To be continued...


由于这篇文章的长度早已超出了简书编辑器的限制,因此后续内容将不在本文中更新,请移步本人的独立博客 caizicong.com 阅读更多内容。

本文原始链接


蔡子聪
2017-1-18


change log:

- 创建(2017-01-18)
- 持续更新(2017-10-25)

上一篇 下一篇

猜你喜欢

热点阅读