想做游戏开发,我应该会点啥?

在知乎上,经常能看到类似“如何入门游戏开发”这样的问题,这篇文章,我试着概括性的对游戏开发所需要的技能做一个总结,希望大家对游戏开发能有一个基本的认识~

游戏开发基础要求高么?

和其他程序猿一样,要想做一名优秀的游戏开发者,底子不能差,算法,数据结构,语言等基础一个都不能少。当然,除了这些基本功外,还要对游戏有比较深入的理解,比如看到一个功能就能猜出或给出一个大概的实现思路。

看一下游戏开发的基本功有哪些:

数学基础:根据你所做内容来决定,一般上层逻辑比较少的去考虑到积分等高数内容。但是如果想搞图形学,矩阵线性代数,高数必须要有一定的功底

算法:常见的排序,查找需要理解并掌握,进一步常见的还有分治,贪心,动态规划,有时候现学现卖也是可以的。另外,除了这些基本的算法,在游戏领域还是有很多其他领域不太常用的算法,比如八叉树查找,碰撞检测,A*。还有一些很特殊的情况需要开发者自己去寻找合适的算法。

C++(C#):基本语法,模板,代理,命名空间,const,继承,内存结构,虚表,引用,断言,宏定义等

数据结构:首先是掌握链表,数组,队列,堆,栈,图,树等数据结构,然后是各种排序,查找,遍历等算法。这些掌握了以后可以很快的熟悉stl或者类似的基本库原,用的时候可以更准确的选择合适的数据结构

设计模式:一般来说,我们需要设计模式来快速的搭建游戏逻辑框架,比如前面提到的各种逻辑系统。而且还需要通过设计模式来理解引擎各个模块的设计思路。当然,如果你想设计游戏引擎,那更不能少了设计模式了。

对引擎各个模块由一定深入的理解:这个不用多说,看一遍游戏引擎架构吧,不理解写出的代码经常会出现各种问题(比如同步问题),编辑器各种功能也用不好。

内存管理:可能很多引擎或者语言已经尽可能的帮你处理内存了,但是你难免需要在一些特殊情况下自己处理,内存池技术,各种C++的new的使用,不得不会。

对开发工具的熟悉:这里并不是指只是对某一个引擎使用熟练,而且对不同引擎相关的内容都有一定理解,可以很快的触类旁通。

编译原理,链接,第三方库:经常会遇到各种链接错误,编译错误,打包错误,这需要你有一定的相关知识与经验去解决这些问题。

性能分析与性能优化: 主要就是三个方面——内存,CPU,GPU。着手点有渲染批次,渲染实例化,布料优化,网络同步数据量,物理开销等,加载资源优化(包的合并),裁剪,声音文件加载,LOD,美术资源制作规范化等。调试的时候可以使用引擎内置工具,进一步的细节可以采用Intel的VTune工具(有时间我可能写一个相关的使用文档)

对游戏的理解:虽然不玩游戏也一样能参与游戏开发,但玩过游戏的人还是有优势的。最明显的是玩过游戏的人会对游戏有更多的想法与意见,也习惯去主动学习其他的游戏的技术与优点。(程序这样,策划更是如此)

开发经验:这个就比较宽泛了,难以只言片语说清。比如你的游戏莫名其妙的出现了一些bug,新手完全无从下手,而有经验的人会有各种手段去调试并解决。经验丰富的老手有时真的抵得上N个新手的,所以这需要各位不断的学习与实践了。

经常听别人说游戏开发很复杂,复杂在哪呢?

总结来说就是内容太杂,细分又太深。随便举两个技术方向(渲染,AI)就够你无限深入了。还有一些模块,说难不算太难,但是内容相当复杂,需求变更频繁,处理不好就如无底洞一般~

那么我们简单的对游戏模块做一个总结:

游戏逻辑模块系统:游戏玩法核心,包括各种武器,状态,技能,背包,战斗等逻辑系统

动画模块系统:状态机,Montage,动画融合,IK等

物理模块:给需要交互表现的对象赋予物理特性(包括刚体,流体,粒子,布料等),调整重力大小等各种参数,调整交互中力的大小,调整物理约束

AI模块: AI导航,与玩家交互等,玩家的很多功能系统也需要给AI来使用,更深层次的可以考虑将机器学习相关的内容融入

UI模块:搭建各种界面框架(背包,捏脸,地图等),非常耗时间与精力,后期需要不断调整

渲染模块:客户端表现核心,不用多说,内容非常多且深

网络模块:底层架构,同步,网络连接

场景模块:包括地形,关卡,植被,角色管理与优化等

输入与输入处理模块:将玩家输入处理转换成逻辑,需要注意的有组合键,输入法切换等

游戏登录与更新:一般这是专门的工具组来做,比如我们常见的各种游戏登录器,在线更新等。

这里面的除了网络基本上都需要美术,策划,程序共同参与与合作。

C++游戏后端开发视频教程

Linux C/C++开发(后端/音视频/游戏/嵌入式/高性能网络/存储/基础架构/安全)icon-default.png?t=N7T8https://link.zhihu.com/?target=https%3A//ke.qq.com/course/417774%3FflowToken%3D1013300

需要C/C++ Linux服务器架构师学习资料加qun812855908获取(资料包括C/C++,Linux,golang技术,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK,ffmpeg等),免费分享

游戏开发仅仅是写逻辑代码么?

当然,不是~~~ 游戏也是一个软件项目,是一个需求变化极为频繁的项目。当你跳出底层的逻辑程序员时,你会发现你还有好多事情要去做。

比如:

版本控制:一般使用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调试后尽快修复并更新

脚本:简单逻辑代码,热更新

打包流水线,包的大小优化,包的多层递归引用优化等:整个项目从编译到配置再到打包需要哪些处理,要注意哪些配置等

工具开发:针对特殊需求开发特定的工具来提高程序、美术、策划的开发效率

当然,上面的内容还远不足以覆盖游戏开发的所有内容,我会在后面学习的时间里继续扩充。 而且学习任何东西都需要一个过程,我们不需要一开始就掌握这么多东西。日积月累,我们都有可能称为一名优秀的游戏开发者~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/226037.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前后端交互—开发一个完整的服务器

代码下载 初始化 新建 apiServer 文件夹作为项目根目录,并在项目根目录中运行如下的命令,初始化包管理配置文件: npm init -y运行如下的命令,安装 express、cors: npm i express cors在项目根目录中新建 app.js 作为整个项目的入口文件&a…

12V升18V4A同步升压恒压WT3210

12V升18V4A同步升压恒压WT3210 WT3210 是一款高功率密度的全集成同步升压转换器,内部集成的功率MOSFET管导通电阻为上管8mΩ和下管15mΩ。可为便携式系统提供空间小尺寸 解决方案。WT3210具有 2.7V 至 20V 的宽输入电压范围,应用在单节或两节锂电池的便携…

关于嵌入式开发的一些信息汇总:嵌入式C开发人员、嵌入式系统Linux

关于嵌入式开发的一些信息汇总:嵌入式C开发人员、嵌入式系统Linux 1 关于嵌入式 C 开发人员1.1 嵌入式 C 开发人员必须具备的一些基本技能是:1.2 嵌入式C开发的应用案例 2 如何学习用于嵌入式系统的 Linux2.1 如何学习Linux2.1.1 第一步:创建…

漏刻有时百度地图API实战开发(12)(切片工具的使用、添加自定义图层TileLayer)

TileLayer向地图中添加自定义图层 var tileLayer new BMap.TileLayer();tileLayer.getTilesUrl function (tileCoord, zoom) {var x tileCoord.x;var y tileCoord.y;return images/tiles/ zoom /tile- x _ y .png;}var lockMap new BMap.MapType(lock_map, tileLaye…

【MySQL】MySQL 在 Centos 7环境安装教程

文章目录 1.卸载不要的环境2.检查系统安装包3.获取mysql官方yum源4.安装mysql yum 源,对比前后yum源5.安装mysql服务6.查看配置文件和数据存储位置7.启动服务和查看启动服务8.登录9.配置my.cnf 1.卸载不要的环境 先检查是否有mariadb存在 ps ajx |grep mariadb如果…

C语言定长数组 变长数组 柔性数组

C语言定长数组 变长数组 柔性数组 文章目录 C语言定长数组 变长数组 柔性数组1. 定长数组2. 变长数组3. 柔性数组3.1 结构体的大小3.2 柔性数组的使用 1. 定长数组 在C99标准之前,C语言在创建数组的时候,数组的大小只能使用常量,常量表达式来…

【EI会议征稿】第三届电子信息工程、大数据与计算机技术国际学术会议(EIBDCT 2024)

第三届电子信息工程、大数据与计算机技术国际学术会议(EIBDCT 2024) 2024 3rd International Conference on Electronic Information Engineering, Big Data and Computer Technology 第三届电子信息工程、大数据与计算机技术国际学术会议(…

小狐狸GPT付费2.4.9弹窗版学习源码介绍

小狐狸GPT付费2.4.9弹窗版学习源码是一套基于GPT(Generative Pre-trained Transformer)模型的开源代码库,旨在帮助开发者快速构建和训练自己的语言模型。该源码集成了多个先进的自然语言处理技术,包括预训练、微调、对话生成等&am…

云服务领取证书,注册域名,实现nginx服务配置证书

目录 1.登录网址腾讯云 2.腾讯云注册域名 3.实名认证,上传信息 4.域名注册 5.领取证书 6.域名与证书绑定 7.下载证书 8.设置环境 9.域名解析 10. 本地域名解析 11.上传证书到目录 12.nginx配置文件做地址重写到证书域名 13.配置证书conf 14.设置index…

磁盘坏道修复工具-是一款非常方便实用的磁盘坏道修复软件-供大家学习研究参考

1、支持磁盘数据擦除。 2、杜绝因硬盘坏道,而产生个人隐私数据泄露的问题。 3、支持对该磁盘格式化。 下载:https://download.csdn.net/download/weixin_43097956/88625682

关于“Python”的核心知识点整理大全22

目录 ​编辑 9.4.2 在一个模块中存储多个类 虽然同一个模块中的类之间应存在某种相关性,但可根据需要在一个模块中存储任意数量的 类。类Battery和ElectricCar都可帮助模拟汽车,因此下面将它们都加入模块car.py中: car.py my_electric_car…

基于 Gin 的 HTTP 代理上网行为记录 demo

前言: 前端时间写了好几篇使用 Gin 框架来做 HTTP 代理 demo 的文章,然后就想着做一个记录上网行为的小工具,就是简单记录看看平时访问了什么网站(基于隧道代理的,不是中间人代理,所以只能记录去了哪里,不能…

wps左上角有绿色小三角的数字如何求和

1.这个状态是求和不了的,使用求和公式求出来的也是0 2.进行如下操作 3.转换好后 则可以求和成功了

深度学习 Day16——P5运动鞋识别

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 | 接辅导、项目定制 文章目录 前言1 我的环境2 代码实现与执行结果2.1 前期准备2.1.1 引入库2.1.2 设置GPU(如果设备上支持GPU就使用GPU,否则使用C…

【Qt QML 入门】TextArea

TextArea也是一个多行文本编辑器。TextArea相比texttedit,增加了占位符文本,并添加了样式定义。 import QtQuick import QtQuick.Window import QtQuick.ControlsWindow {id: winwidth: 800height: 600visible: trueTextArea {id: taanchors.centerIn: …

解决Visual Studio 各版本都出现新建项目后解决方案下没有文件和项目问题

一步一步创建C#控制台应用程序也会出错,这个你可能不会相信,我就遇到了这么一次,就在刚刚,是的,我都不敢相信,用了这么多年的新建一个控制台程序居然不正常了。新建完毕发现里面什么都没有,除了…

首发卡密引流系统源码

程序特色: 支持个人和企业小程序广告获取卡密。 支持短视频点赞和关注获取卡密。 搭建教程: 环境要求:Nginx、MySQL 5.6、PHP 5.6 步骤: 将压缩包解压至网站根目录。 打开域名/install,按照提示填写数据库信息进行…

JS对象循环引用的危害:你知道吗?

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

移动端机器学习框架 MDL 简介与实践

Mobile-deep-learning(MDL) MDL 是百度研发的可以部署在移动端的基于卷积神经网络实现的移动端框架,可以应用在图像识别领域。 具体应用:在手机百度 App 中,用户只需要点击自动拍开关,将手机对准物体&…

联想王传东:AI PC迈入AI Ready 即将开启AI On

“AI PC已经正式迈入AI Ready 阶段,接下来会逐渐进入到AI On阶段。”12月16日,英特尔人工智能创新应用大赛启动仪式在深圳举办。作为独家AI PC合作伙伴,联想集团副总裁、中国区首席市场官王传东代表公司出席仪式并致辞。 王传东认为AI PC的发…