资料介绍
来源:游戏开发那些事
作者:Jerish
在知乎上,经常能看到类似“如何入门游戏开发”这样的问题,对于进入游戏行业快三年的我来说,现在应该有能力解答这个问题了。
之前偶然在Gad上看到一个游戏开发入门系列的视频,觉得内容挺全面的,就定了一个月的计划把这些课程都看完了,同时在我的博客上面做了很多笔记,收获非常大。从今天开始,我决定进一步完善游戏开发入门系列的文章并把他们搬到公众号里面。
如果你想进入游戏行业,觉得学习资料太多很难入门,那我觉得这个系列会对你非常有帮助。文章大概会有12篇左右,从AI、渲染到地形、物理再到动画、网络我都会尽可能的涉及到,有什么问题欢迎留言提问。
第一篇文章里面,我试着概括性的对游戏开发所需要的技能做一个总结,希望大家对游戏开发能有一个基本的认识~
游戏开发基础要求高么?
和其他程序猿一样,要想做一名优秀的游戏开发者,底子不能差,算法,数据结构,语言等基础一个都不能少。当然,除了这些基本功外,还要对游戏有比较深入的理解,比如看到一个功能就能猜出或给出一个大概的实现思路。
看一下游戏开发的基本功有哪些:
数学基础:根据你所做内容来决定,一般上层逻辑比较少的去考虑到积分等高数内容。但是如果想搞图形学,矩阵线性代数,高数必须要有一定的功底
算法:常见的排序,查找需要理解并掌握,进一步常见的还有分治,贪心,动态规划,有时候现学现卖也是可以的。另外,除了这些基本的算法,在游戏领域还是有很多其他领域不太常用的算法,比如八叉树查找,碰撞检测,A*。还有一些很特殊的情况需要开发者自己去寻找合适的算法。
C++(C#):基本语法,模板,代理,命名空间,const,继承,内存结构,虚表,引用,断言,宏定义等
数据结构:首先是掌握链表,数组,队列,堆,栈,图,树等数据结构,然后是各种排序,查找,遍历等算法。这些掌握了以后可以很快的熟悉stl或者类似的基本库原,用的时候可以更准确的选择合适的数据结构
设计模式:一般来说,我们需要设计模式来快速的搭建游戏逻辑框架,比如前面提到的各种逻辑系统。而且还需要通过设计模式来理解引擎各个模块的设计思路。当然,如果你想设计游戏引擎,那更不能少了设计模式了。
对引擎各个模块由一定深入的理解:这个不用多说,看一遍游戏引擎架构吧,不理解写出的代码经常会出现各种问题(比如同步问题),编辑器各种功能也用不好。
内存管理:可能很多引擎或者语言已经尽可能的帮你处理内存了,但是你难免需要在一些特殊情况下自己处理,内存池技术,各种C++的new的使用,不得不会。
对开发工具的熟悉:这里并不是指只是对某一个引擎使用熟练,而且对不同引擎相关的内容都有一定理解,可以很快的触类旁通。
编译原理,链接,第三方库:经常会遇到各种链接错误,编译错误,打包错误,这需要你有一定的相关知识与经验去解决这些问题。
性能分析与性能优化: 主要就是三个方面——内存,CPU,GPU。着手点有渲染批次,渲染实例化,布料优化,网络同步数据量,物理开销等,加载资源优化(包的合并),裁剪,声音文件加载,LOD,美术资源制作规范化等。调试的时候可以使用引擎内置工具,进一步的细节可以采用Intel的VTune工具(有时间我可能写一个相关的使用文档)
对游戏的理解:虽然不玩游戏也一样能参与游戏开发,但玩过游戏的人还是有优势的。最明显的是玩过游戏的人会对游戏有更多的想法与意见,也习惯去主动学习其他的游戏的技术与优点。(程序这样,策划更是如此)
开发经验:这个就比较宽泛了,难以只言片语说清。比如你的游戏莫名其妙的出现了一些bug,新手完全无从下手,而有经验的人会有各种手段去调试并解决。经验丰富的老手有时真的抵得上N个新手的,所以这需要各位不断的学习与实践了。
经常听别人说游戏开发很复杂,复杂在哪呢?
总结来说就是内容太杂,细分又太深。随便举两个技术方向(渲染,AI)就够你无限深入了。还有一些模块,说难不算太难,但是内容相当复杂,需求变更频繁,处理不好就如无底洞一般~
那么我们简单的对游戏模块做一个总结:
游戏逻辑模块系统:游戏玩法核心,包括各种武器,状态,技能,背包,战斗等逻辑系统
动画模块系统:状态机,Montage,动画融合,IK等
物理模块:给需要交互表现的对象赋予物理特性(包括刚体,流体,粒子,布料等),调整重力大小等各种参数,调整交互中力的大小,调整物理约束
AI模块: AI导航,与玩家交互等,玩家的很多功能系统也需要给AI来使用,更深层次的可以考虑将机器学习相关的内容融入
UI模块:搭建各种界面框架(背包,捏脸,地图等),非常耗时间与精力,后期需要不断调整
渲染模块:客户端表现核心,不用多说,内容非常多且深
网络模块:底层架构,同步,网络连接
场景模块:包括地形,关卡,植被,角色管理与优化等
输入与输入处理模块:将玩家输入处理转换成逻辑,需要注意的有组合键,输入法切换等
游戏登录与更新:一般这是专门的工具组来做,比如我们常见的各种游戏登录器,在线更新等。
这里面的除了网络基本上都需要美术,策划,程序共同参与与合作。
游戏开发仅仅是写逻辑代码么?
当然,不是~~~ 游戏也是一个软件项目,是一个需求变化极为频繁的项目。当你跳出底层的逻辑程序员时,你会发现你还有好多事情要去做。
比如:
版本控制:一般使用git或者svn
存储与序列化(如protobuf):单机玩家的游戏存档需要通过序列化。游戏中的同步系统也需要通过序列化 对象来搭建
反外挂:保证游戏公平性,一般服务器上做各种校验措施,这个东西真的不容易,而且又麻烦,身边懂得人真的不多,我本身也很希望有高人指点一二
多线程优化:一般用于渲染,物理,网络同步等,减少开销,增加cpu利用率
数据库:什么数据要存在数据库里面,什么存在本地就可以。应该选择什么数据库?之后会不会出现游戏合服数据库合并?合并的Key怎么处理?
CDN /服务器的部署与运行等:这个也很复杂,又要考虑成本又想容纳更多玩家(网游),有时可能需要用到CDN技术来优化网络同步,另外还要考虑成本等问题来决定是否租用云服务器
实现网络穿透 :对于玩家自己开房间类的游戏,需要我们提供网络穿透的手段,才能让两个内网的玩家链接并通信。有的时候,网络穿透技术平台会提供,不需要自己造轮子。
使用性能分析工具:前面提到了性能优化,优化前我们需要各种工具来辅助我们找到影响游戏效率的瓶颈(如VTune)
配置:需要大量策划配置的数据存放在哪里?配置文件?XML?这需要构建一套小的系统(或者引擎提供)
声音数据处理:一般引擎提供基本的音乐与音效处理,但是有的引擎对音频方面处理的更深入,效果更好
平台对接:游戏需要发布到不同的平台,这个平台不仅仅指硬件平台(Android,iOS,PS4,PC,XBOX)还包括各种软件平台(各种应用商店,如PC上的Steam,WeGame。安卓上的应用宝,各种软件管家等)该过程其实也相当繁琐,有一些平台的审核非常严格,需要积累一定的经验才能快速的处理相关内容
国际化与本地化:简单来说,就是不同国家的语言版本不同。如果你的游戏不是只卖给英国美国,你就不得不面对本地化,坑很多
日志系统:开发与运营 游戏上线一定很多bug,你又没办法去玩家电脑上调试,如何快速定位bug,日志系统很有效
调试与维护:
开发期 断点调试(最有效)、日志调试、dump调试 、控制台调试,可视化调试(在场景内绘制特定的几何体),截图录屏调试(一般用于调试渲染,动画等)
上线期 日志调试、服务器可以用dump调试,也可以想办法把客户端的dump传送到服务器(做一个内置的自动收集客户端dump程序) 、管理员GM调试(非常重要,可以避免重启服务器)
bug处理:
严重损失的bug 有时候已经发生的造成玩家严重损失的bug(如玩家投入大量时间、金钱获取的)无法改变,又不能及时修复,想要弥补玩家,可以通过GM来给予玩家补偿。
游戏崩溃性bug 需要在游戏上线的前两天,把发生概率高的所有Bug通过Dump调试后尽快修复并更新
脚本:简单逻辑代码,热更新
打包流水线,包的大小优化,包的多层递归引用优化等:整个项目从编译到配置再到打包需要哪些处理,要注意哪些配置等
工具开发:针对特殊需求开发特定的工具来提高程序、美术、策划的开发效率
当然,上面的内容还远不足以覆盖游戏开发的所有内容,我会在后面学习的时间里继续扩充。当然呢,学习任何东西都需要一个过程,我们不需要一开始就掌握这么多东西。日积月累,我们都有可能称为一名优秀的游戏开发者~
- 我想做个MP3,要怎么入手?
- 高速轴出现键槽磨损问题应该如何修复 7次下载
- 如何对你手头的MCU和开发板或者STM32进行性能测试?
- 视频介绍Arduino的历史和创始人马西莫·班兹的故事,看过这篇您再学Arduino! 为 初学者 和 创客教师 介绍Ard
- 真正的嵌入式开发高手该会些啥?
- 基于Unity3D游戏引擎的神经反馈治疗系统 5次下载
- Android开发APP应该如何省电
- C语言能开发什么?应该怎么去学习
- 嵌入式开发人员应该具备哪些知识和能力
- 嵌入式开发的基本步骤是怎么样的
- Android开发教程之实用的安卓游戏开发电子书免费下载 4次下载
- 基于安卓开发C++语言的游戏开发入门 4次下载
- Android游戏开发之重力系统开发 10次下载
- 新建文件夹充电仿真 5次下载
- Lua游戏开发实践指南 - 详章 29次下载
- 程序中增加一个变量导致异常的分析 368次阅读
- 简单讲讲u-boot和bootloader有啥区别 951次阅读
- 板卡上散热硅脂下滑可能是什么原因呢 706次阅读
- 鸿蒙上开发“推箱子”小游戏 950次阅读
- 如何选择合适的DAQ软件 805次阅读
- 由浅到深搭建远端容器开发环境 734次阅读
- Android游戏开发工具以及游戏调试、打包和分发技巧 2555次阅读
- 盘点影响电动汽车电池续航的要素 2031次阅读
- MKR Vidor 4000一款拇指型的FPGA开发板 1174次阅读
- 基于Java的游戏服务器开发技术体系详解 7230次阅读
- 无线充电技术应该会肉眼可见的速度逐渐普及 6244次阅读
- 游戏的优化应该考虑的四个方向 1720次阅读
- 医疗产业临转型应该会出现的五种医疗技术趋势及新兴产品概述 5350次阅读
- 整理了所有数据专家都应该会的七款Python工具 4157次阅读
- 无线充电的三大误区 2978次阅读
下载排行
本周
- 1电子电路原理第七版PDF电子教材免费下载
- 0.00 MB | 1491次下载 | 免费
- 2单片机典型实例介绍
- 18.19 MB | 95次下载 | 1 积分
- 3S7-200PLC编程实例详细资料
- 1.17 MB | 27次下载 | 1 积分
- 4笔记本电脑主板的元件识别和讲解说明
- 4.28 MB | 18次下载 | 4 积分
- 5开关电源原理及各功能电路详解
- 0.38 MB | 11次下载 | 免费
- 6100W短波放大电路图
- 0.05 MB | 4次下载 | 3 积分
- 7基于单片机和 SG3525的程控开关电源设计
- 0.23 MB | 4次下载 | 免费
- 8基于AT89C2051/4051单片机编程器的实验
- 0.11 MB | 4次下载 | 免费
本月
- 1OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234313次下载 | 免费
- 2PADS 9.0 2009最新版 -下载
- 0.00 MB | 66304次下载 | 免费
- 3protel99下载protel99软件下载(中文版)
- 0.00 MB | 51209次下载 | 免费
- 4LabView 8.0 专业版下载 (3CD完整版)
- 0.00 MB | 51043次下载 | 免费
- 5555集成电路应用800例(新编版)
- 0.00 MB | 33562次下载 | 免费
- 6接口电路图大全
- 未知 | 30320次下载 | 免费
- 7Multisim 10下载Multisim 10 中文版
- 0.00 MB | 28588次下载 | 免费
- 8开关电源设计实例指南
- 未知 | 21539次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935053次下载 | 免费
- 2protel99se软件下载(可英文版转中文版)
- 78.1 MB | 537793次下载 | 免费
- 3MATLAB 7.1 下载 (含软件介绍)
- 未知 | 420026次下载 | 免费
- 4OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234313次下载 | 免费
- 5Altium DXP2002下载入口
- 未知 | 233046次下载 | 免费
- 6电路仿真软件multisim 10.0免费下载
- 340992 | 191183次下载 | 免费
- 7十天学会AVR单片机与C语言视频教程 下载
- 158M | 183277次下载 | 免费
- 8proe5.0野火版下载(中文版免费下载)
- 未知 | 138039次下载 | 免费
评论
查看更多