zsz8868 发表于 2024-7-15 18:47

游戏开发需要具备哪些技术

游戏开发需要具备哪些技术

大师好我是艾西,今天跟大师闲聊一下。开发一款游戏在没有参照物或是底板的情况下开发一款游戏都需要具备哪些技术,在开发过程中我们又会涉及到哪些板块或是范围。


一款游戏的开发需要一个总的游戏筹谋人,为游戏编写布景故事,制定游戏法则,设计游戏交互环节,计算游戏公式,以及整个游戏世界的一切细节等。
和其他法式猿一样,要想做一名优秀的游戏开发者,底子不能差,算法,数据布局,语言等基础一个都不能少。当然,除了这些基本功外,还要对游戏有斗劲深入的理解,比如看到一个功能就能猜出或给出一个概略的实现思路。
游戏法式员:游戏法式员按照游戏筹谋人的筹谋书,分歧的游戏需要分歧的计算机语言以及分歧的游戏引擎进行开发。
比如网络游戏法式,需要用到C++语言,用到cocos2D-x游戏引擎,untiy3D游戏引擎,Dx等技术。手机游戏法式,用到java计算机语言,安卓平台技术,ios平台技术等。
游戏美工:游戏美工主要是游戏原画,2D、3D游戏美工,需要用到手绘,PS,3Dmax等软件。设计与制作游戏中的角色,场景,动画,特效等。


一、网络游戏筹谋设计分为执行筹谋和主筹谋,网络游戏美工设计分为原画设计、游戏UI设计、游游戏动画设计,网络游戏法式设计分为游戏法式设计。
1、网络游戏筹谋设计师需要学习:数字游戏宏不雅观环境解析、数字游戏高级筹谋理论、数字游戏创意实践Unity3D项目开发。
2、网络游戏原画设计需要学习:手绘基础、原画艺术基础、动物角色设定、场景设定。
3、网络游戏UI设计需要学习:UED概述、GUI设计基础、网页UI设计、软件UI设计、游戏UI设计。
4、网络游戏法式设计需要学习:游戏法式设计、算法与数据布局、Win32法式设计、游戏数学和智能应用、2D游戏技术与应用。
游戏开发工程师掌握内容:
1、了解并致力于游戏总体设计。
2、配合主法式完成游戏架构及各大功能的设计、开发、调试和其他技术撑持。
3、负责游戏开发东西和运营维护东西的设计与开发。
4、完成游戏处事器端模块代码及相关文档的书写、优化对已完成代码进行单元测试。
5、打点维护游戏平台的制作与运行。
6、与团队其他人员配合,促进游戏的改良创新。
负责客户端架构设计、模块划分、编纂器规划、引擎维护与人员分工。负责游戏客户端与公司技术平台的整合。协调与处事器端、筹谋、美术和公司其他技术部门之间的关系。


看一下游戏开发的基本功有哪些:
数学基础:按照你所做内容来决定,一般上层逻辑斗劲少的去考虑到积分等高数内容。但是如果想搞图形学,矩阵线性代数,高数必需要有必然的功底
算法:常见的排序,查找需要理解并掌握,进一步常见的还有分治,贪心,动态规划,有时候现学现卖也是可以的。此外,除了这些基本的算法,在游戏范围还是有很多其他范围不太常用的算法,比如八叉树查找,碰撞检测,A*。还有一些很特殊的情况需要开发者本身去寻找合适的算法。
C++(C#):基本语法,模板,代办代理,定名空间,const,担任,内存布局,虚表,引用,断言,宏定义等
数据布局:首先是掌握链表,数组,队列,堆,栈,图,树等数据布局,然后是各种排序,查找,遍历等算法。这些掌握了以后可以很快的熟悉stl或者类似的基本库原,用的时候可以更准确的选择合适的数据布局
设计模式:一般来说,我们需要设计模式来快速的搭建游戏逻辑框架,比如前面提到的各种逻辑系统。而且还需要通过设计模式来理解引擎各个模块的设计思路。
对引擎各个模块有必然深入的理解:这个不用多说,看一遍游戏引擎架构吧,不理解写出的代码经常会呈现各种问题(比如同步问题),编纂器各种功能也用不好。
内存打点:可能很多引擎或者语言已经尽可能的帮你措置内存了,但是你不免需要在一些特殊情况下本身措置,内存池技术,各种C++的new的使用,不得不会。
对开发东西的熟悉:这里并不是指只是对某一个引擎使用熟练,而且对分歧引擎相关的内容都有必然理解,可以很快的触类旁通。
编译道理,链接,第三方库:经常会遇到各种链接错误,编译错误,打包错误,这需要有必然的相关常识与经验去解决这些问题。
性能分析与性能优化: 主要就是三个方面——内存,CPU,GPU。着手点有衬着批次,衬着实例化,布料优化,网络同步数据量,物理开销等,加载资源优化(包的合并),裁剪,声音文件加载,LOD,美术资源制作规范化等。调试的时候可以使用引擎内置东西,进一步的细节可以采用Intel的VTune东西
对游戏的理解:虽然不玩游戏也一样能参与游戏开发,但玩过游戏的人还是有优势的。最明显的是玩过游戏的人会对游戏有更多的想法与定见,也习惯去主动学习其他的游戏的技术与长处。(法式这样,筹谋更是如此)
开发经验:这个就斗劲宽泛了,难以只言片语说清。


经常听别人说游戏开发很复杂:
总结来说就是内容太杂,细分又太深。随便举两个技术标的目的(衬着,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调试后尽快修复并更新
脚本:简单逻辑代码,热更新
打包流水线,包的大小优化,包的多层递归引用优化等:整个项目从编译到配置再到打包需要哪些措置,要注意哪些配置等
东西开发:针对特殊需求开发特定的东西来提高法式、美术、筹谋的开发效率
当然,上面的内容还远不足以覆盖游戏开发的所有内容
而且学习任何东西都需要一个过程,我们不需要一开始就掌握这么多东西。日积月累下都有可能成为一名优秀的游戏开发者
页: [1]
查看完整版本: 游戏开发需要具备哪些技术