如何编写一个程序的步骤游戏 游戏开发的基本流程和技巧?

其实,游戏如何制作应该也能想象出来。接下来由浅入深解释一下。比如2048小游戏,和大部分软件是没有区别的,使用非游戏引擎也能做的出来。关键技术只有两点:1、根据数据,显示(专业名词叫做渲染)对应数字的图片。2、需要移动位置时,按固定帧率(比如每秒60次)刷新图片位置,做出动画效果。只要有这两点原理,那么2D动画也一样可以实现:如上图,上图中人物位置没有变化,只是在不断变换图片而已,那么只需要在2048游戏的基础上加一条:3、显示人物图片,每隔10帧换一个图片,循环反复,形成动画效果。那么想让人物走起来就是小儿科的问题了:4、用变量控制人物位置,向前移动,同时人物动画一直播放。到这里都是1+1=2的问题,估计题主更想知道的是:3D人物行走,背后原理是什么?不好意思,3D游戏的实现原理,一下子从2D游戏产生了质的飞跃。第一个真3D游戏《雷神之锤(QUAKE)》也是多次技术革新的产物(在这之前也有3D游戏,但是基本上是依靠图片的缩放斜切变换、限制摄像机角度伪造出的效果)。想知道3D游戏历史发展过程,推荐这本书:做出行走的3D人物之前,要先解决这个问题:1、如何在屏幕上显示3D的立方体、球体。且能转换到不同角度。越基础的问题越是复杂,在《雷神之锤》之前,已经有不少3D软件支持类似的显示技术了,但挑战在于——如何在动态展示3D物体时,保持至少30帧的刷新速度。解决这个问题经历了相当久的时间,因为在二十多年前,需要高深的图形学知识以及深度的编程优化才能实现出最基本的效果。明白了这点,也就明白了为什么第一个算得上真3D的游戏直到1996年才出现。最基本的问题最困难。对实时性的高要求让3D技术产生了两大分支——实时渲染(用于游戏)和非实时渲染(常见用于影视)。在解决了最基础的问题之后,接下来一系列眼花缭乱的技术,就只是寻常的技术演化罢了:2、将任意物体,用“顶点”和“贴图”概括,做出3D的外观。3、表现出光线、阴影。所谓顶点就是三维空间中的坐标点,贴图就是把图片糊在3D顶点上,就形成了三维空间中的模型。制作模型依赖于3D软件,而3D软件工具的出现,比3D游戏要早得多。所以说一个新技术的突破,大的历史环境、技术背景是必须的。另外3D模型是否能看得过去,十分依赖于光照、阴影是否真实,这又是另外一个大问题了。3、3D动画是怎么做的?让顶点动起来即可。既然我们已经拥有了以30帧的速度渲染物体的技术,那么只要让人物模型的三维“顶点”动起来,不就实现走路的动画了吗?另外再加上物体整体的位移和旋转,实现动画的最基本技术就齐备了。4、间接移动顶点——骨骼动画技术基本问题解决之后,剩下的不过就是进一步完善罢了。在QUAKE的时代,人物只是非常僵硬的抬抬手、动动脚,远远达不到逼真的要求。如何才能做出具有真实感的动作呢?问题的关键是:如果直接移动顶点,美术设计师几乎不可能做出真实的动画,因为顶点之间本质上是有关联的,如果用手一个一个拖,其工作量要大于用橡皮泥做动画。所以后来出现了一个间接技术——给模型绑上骨骼,一个骨骼控制一部分顶点。这样一来,美术设计师只需要让“骨架”真实的动起来,模型也自然会跟上,形成细腻真实的动作。5、将以上所有技术结合在一起——游戏引擎看了以上讲解,你一定会和我一样,发现“让3D人物行走”其实是一系列技术的结合。所以外行人很难凭空想象出来。甚至对于内行人来说,完全理解整个流程也太复杂了。因此后来逐渐出现了“游戏引擎”的概念。“游戏引擎”把游戏开发必要的的模块和工具整合起来(但不包含专业的美术制作工具),可以让游戏开发者专注到游戏本身,不再需要关注原理问题,因为渲染原理已经形成固定模式了。有了“游戏引擎”之后,从外行人的角度看,游戏开发工具就只剩两大块了:1、3DMax、Maya等三维建模和动画软件。由专业的美术人员使用,制作出原始模型和动画素材。2、技术人员和游戏设计师,一起在游戏引擎中整合资源、编写游戏逻辑,形成完整的游戏。看了以上解释,题主应该能大致想象出,3D游戏是如何实现的了吧?}
从放弃求职回家已经一个半月了,一直都在备考事业编。发现这玩意比游戏开发简单太多了,没有人刁难,没有人催促,几个月举办一次,一天只需要学习3-4个小时,其余时间都是自由安排,太舒服了。考上编后也很不错,早上8.30-11.30
下午2.30到5.30,一天6个小时,一周5天,一个月就能税前5000了。比在外面被压到3000一个月的岗位好了不是一点半点。PS:太感谢国家的六保六稳了,从来没有遇到过考事业编能够这么少人,这么多机会的。有了时间后,开始努力考虑未来的人生(事业编基本上算是一眼望到头的职位,除了评职称,没有别的提高工资的方法了)还好的是,事业编比公务员开朗点,允许自由创业或者接外包。所以经过思考后,我决定就算没有好结果,甚至只是徒劳,也要往独立游戏的方向搞一搞,不然一辈子就这样浑浑噩噩的就过去了。(现在已经过去四分之一)目前程序基本上不算大问题,就是需要多接触别人的项目和从别人的视频中了解技术。美术确定好2D像素画,也在努力画自己喜欢的东西(目前原画还在不断学习中,并不是最终原画~)头发以自己的发型为原型,太难画出来了并且画2D的一大好处,就是想怎么画就怎么画,不需要想的太复杂,可以参考《哆啦A梦》,只负责复现竹蜻蜓样子和实现功能即可,不需要关注具体的物体细节,这点比3D简单很多。(主要是解放了想象,可以自由的发挥主观性,3D要关注武器的细节处理,感觉很难)然后策划部分,这个算是一大难点,方案出来不难,想达到好玩,甚至能带来快乐就需要一定的经验。毕竟从没进入过公司工作,手上有没有别人的游戏数据,只能慢慢摸索游戏的框架和设计,错了也可以重新开始制作。(毕竟现在什么都没有,就是有时间)介于以前做过的文章不够严谨,这次打算补充知识点。进入主题,先看个短视频:回家总结后,发现游戏开发不是一朝一夕的事情,真的需要相当多的知识点才能做出好的作品,难怪外面的世界充满了挑(nei)战(juan)。1.硬件知识曾经的我还建议过买什么硬件,现在的我觉得硬件也就是个摆设,因为买的好不如用的好。只要用的好,什么硬件都能跑。!任何CPU搭配任何GPU都可以开发游戏!,只不过硬件好点机器运行起来就快点,但是并不能真正提高开发效率,效率永远取决于自己的科学规划!开发游戏过程中,真正制约运行速率的是CPU不是GPU,因为大部分游戏都以单线程开发为主,所以一般调试运行的时候基本也是考验单线程能力。购买CPU核心可以买多核的,但是单核频率一定要高,否则运行很慢(我现在极度嫌弃R5 2600了,每次调试都得3秒钟~),MAC除外。GPU的目的是加速图形计算,也就是3D开发中可以加快渲染速率,越强的GPU渲染越快,但是~~只开发3D才有的好处,我做2D游戏的,基本上所有的核显都能运行,(除非没有核显,不然现在的核显应该不差于90年代的小霸王了吧~)。曾经的我以为开发游戏需要的是一个很好的显卡来应对未来的光追,实际上开发者的本质是程序本身,如果过度的关注那些画面美术的话就会导致自我定位的错误。开发者就应该注重程序开发,而不能盲目的追求美术效果。游戏开发中美术是服务于游戏本身的,不是服务其他东西的。盲目的跟别人竞争美术会本末倒置的。所以开发游戏尽量避免纠结买什么显卡,开发什么着色器,做到什么美术效果。如果真用到那个技术,到时候应该也不会作为一个普通的开发者了,肯定有一定的项目或者团队或者到公司就职,钱都不会是问题。固态的话就不多说了,现阶段应该不会有人还用旧的机械开发了吧?注意!我猜很多人都看了老黄的RTX30系列发布会了,然后有人问我,需不需要为了未来的游戏准备买RTX系列的显卡来学习开发。这里需要回答几个问题。未来光追会不会用的越来越多?会,因为NVIDIA是行业巨头,老黄做什么下游就得跟着做什么。所以光追也是要学习的内容(内卷的资格)。未来RTX会不会越来越多,GTX越来越少?肯定的,因为PC巨头基本上就老黄垄断了,AMD发力还是不太OK,老黄带大家进入了RTX时代,大概率未来显卡都会是RTX。那么需不需要为了未来而现在买RTX做开发?没必要!没必要!!没必要!!!首先我得好好的回答这个问题。现阶段大家产生了一个错误的概念就是要买RTX才能有光追,AMD的没有光追单元,因此PS5上的是个假的光追。实际上~现在所有的显卡,都无法实现光追本身!!!!!!!!!!!!!!!光追本身是个物理现象,光带有波粒二象性,偏振周期,能量等一系列物理性质,想要在计算机上实现光追,只需要把光的物理性质输入物理引擎,并弄好场景和发射点,哪怕是核显也能实现光追现象,光追不依赖于某一硬件产生,光追是物理现象~为什么老黄的显卡和游戏都那么真实的光线,原因就在于PBR(Physicallly-Based Rendering)材质,基于物理的渲染。也就是说RTX实现的只是渲染结果,而光追本身的物理现象根本没实现,也没法实现(因为算力太大了)。所以显卡中的光追,都是基于PBR材质做的渲染,依赖于DX12提供API。各位如果不相信的话,可以看看INTEL,PS5,cryengine,UE5,都放出来过相关的光追视频,但是从没有依赖于RTX本身。并且知乎上也有挺多大佬,也没有依赖于某一硬件就实现了光追的项目。关于电脑的维护,一年下来因为电脑崩溃的情况大概率只有10次左右,但是大部分都是硬件问题,具体出在了哪里呢?机箱散热不行。散热可以说是电脑负载过度崩溃的最罪魁祸首,很多人不注重电脑内部的风道设计,导致热量无法顺利排出而让核心温度过高。(笔记本同样也要注重散热),一旦高热降频下来就直接导致系统卡顿,这在我跑3D项目上出现过无数次了。(因为经常一打开就是几十个程序和网页,一旦降频就崩溃了)内存胡乱的超频。现阶段,如果说最多出现的硬件问题,大概率就是超频了。在0202年的今天,如果还有人说自己的电脑无法超频,那就赶不上时代了。AMD的普及让所有硬件都可以超频,但问题就是很多人超频只跟着贴吧和厂家建议,而主板往往不同的型号,性能都不一样(主要体现在供电模块)盲目的超到了3200很容易崩溃,但是兼顾了打游戏的需求,很多人又不得不妥协。开发游戏一般建议2400就足够,实在觉得打游戏不行就换C15内存吧功耗的判断失误。一般来说,很多人选购电源不会有太大的问题,普遍超出硬件的200 -300W左右,但是主要就在工作环境的功耗判断。经常性的断电对开发工作是个致命打击,在2020年的今天断电已经是个低概率事件了,往往发生都是因为功率不够,极大概率是竞争用电(比如电脑+空调都用一个排插,比如宿舍里一个人煮水,基本上就会停电)以上三种是一年来遇到过最多的问题,经常性的突发导致开发中断,丢失了好多个版本。所以一定要学会用git进行版本控制,保存好自己的备份。2.软件知识曾经的我,太年轻,深入的学习之后才发现,基本上把计算机所学的全部知识都复习了一遍~先开始逐一探讨。1.语言和引擎这个大家都知道TS+COCOS,C#+unity,CPP+UE,但是这只是基本中的基本。但是说只懂两样东西的话,也就是个小孩子的玩具罢了,自己玩无所谓,出去找工作会被各种鞭策,各种吊打。大人的社会,太不容易了~学习语言需要根据专门的引擎决定,但是万变不离其宗的一门就是C++,基本上无论走哪个技术,用哪个引擎,最终都会回到C++的问题上来。做游戏久了,才明白优化的重要性,要优化好游戏,就得回到C++的内存管理上。我本来还以为C#可以包揽万物,但是当我真正接触GC时,单纯在C#上可以说无从下手,因为C#本身是个完全面向对象语言,很多东西都封装实现了,让我根本上忽视了两样重要且致命的东西,构造函数和析构函数,我当时为了优化碰撞器,但是一直怀疑着一样东西。刀刃脚本,触发器进入生成一个对象,来判断碰撞体身上是否含有IDmage接口那就是脚本运行结束后,这个生成的idamage是否有释放掉,但是围绕了C#的书,我看了又看,基本没讲过这个,测试了好几遍也发现对象也正确回收了。但是我迟迟得不到答案,一直陷入无限的纠结中。然后~看过这本书后,我才发现(应该说想不起来知识点了),原来一个函数里面有构造器和析构器,C#/JAVA从来没跟我说过析构器的存在(书本知识点也就简短的一小章节,老师基本不讲~),导致我一直陷入沉思,看了C++才明白,哦,原来结束了还需要手动释放内存的~~C#居然没跟我讲过~所以,很多时候用一些高级语言,而不去扎实C/C++的基础,真的很容易在某些地方陷入纠结的。虽然APP在现在硬件发达的手机上运行没压力,但是游戏可不一样,因为每一滴性能消耗都有可能有一个玩家流失。然后就是热更语言(更新用的),大部分都是选择LUA作为热更,因为成熟的方案多。热更新成为了现在的潮流,很多开发商都为了避免游戏下线到app商店更新而影响游戏体验。游玩游戏时后台自动下载更新包的做法非常符合现在的玩家需求,虽然大版本还是要自己手动更新,但是小版本或者一些脚本的修改就不需要那么麻烦了,也可以提高玩家游玩时间。而且越来越多厂商用热更作为脚本语言,(因为部分游戏都是换皮的框架,实际上只需要做简单的修改就可以让游戏运行,所以用LUA方便不少,百试不爽~),既能绕过IOS,又能方便用户,更能节省开发商的麻烦,何乐而不为呢。LUA也分为很多种类,我目前围绕的是XLUA,其实LUA都差不多的,按不同项目确定。关于引擎的选择这个问题其实不用太纠结,清晰自己的定位,身为开发者就是程序为主,无论用哪个都不能被引擎和语言所限制,要明白引擎只是个工具,哪个工具好用就用哪个。Unity对于我来说开发2D好很多,并且有相当多的项目和视频可以参考。但是Unity缺点也很明显,就是自己得为自己做一大堆工具:比如我自己做的控制时间工具,控制出生工具,都是挺累人的,一有新的需求旧的工具要么修改,要么重写。想过用别人的插件但是别人的又不一定合适自己(压根就看不懂别人的代码)。简单来说,经常造轮子~UE大部分用来开发3D游戏的(貌似用UE做2D游戏的没见过吧~王者是2.5D),渲染是UE的强项,见过很多人单单用UE的蓝图就做出各种吊炸天的CG或者游戏。其实我也考虑过用UE做游戏,问题在于做个项目出去投简历找工作不难,但是做个独立游戏就得自己兼顾3D建模和美术,不太现实。能了解程序,策划,又得把美术精通,这样的人有没有呢?肯定有,但是问题在于很少,大部分都是外包,外包的美术各位都有目共睹,新出的网游一堆一堆的(看着这样的3D,说实话,我已经看出我自己做3D游戏最终的结果会怎么样了~~)况且为了独立开发而用UE4,未免显得技术太重了~虽然U++也封装的跟C#差不多了,但是毕竟U++也是C++过来的,调试起来肯定没有C#方便,并且C++最大的问题在于,游戏开发到后期,甚至都没察觉程序有问题的,直到出现崩溃。这太考验程序员的能力了。3D是个很庞大的游戏项目,个人开发更需要非常大的功夫,厂商也都是有着一条生产线的,每个人基本上都是一颗螺丝钉,各司其职。所以不是真的很有技术和钱,我不太建议个人搞3D项目,拿去面试的没问题,但是独立开发个人搞3D真的太难了。(只针对入行开发的人)cocos目前来说国内不少岗位还在招聘,但是很少有人建议用Cocos了,因为天花板很明显。CryEngine这个挺好玩的,不过感觉国内应该不会有人用这个引擎吧~总结,引擎的选择就以自己的项目(需求)出发,哪个简单顺手就用哪个。2.数据结构与算法、设计模式、开发模式这个内容是个非常重要的内容,无论是独立开发还是面试工作,这三样是肯定得学会的。很多人对这三样东西满不在乎,或者避而远之,实际上这三个内容不难,觉得困难主要是讲解的太难,结合游戏案例讲解的太少。逐个结合讲解数据结构:数据结构无非是数组,链表,栈,队列,字典(也可以说散列表,作用差不多的),树,那么每一个结构会在哪里使用呢?数组:在游戏开发中用的较多,特点就是访问快,扩容简单,缺点插入难,删除难。经常用的就是批量生成变量,比如背包:一开始为背包生成三个格子,但是实际上只有一样物品生成一个,但是显得有点单调直接调成16个,让UI界面没那么单调了基于上面可以发现,数组批量生成的都是功能相同的对象,至于内部的是刀还是剑亦或者其他装备不需要管(解耦了装备和背包,后面会讲解耦),UI只需要提供足够数量的格子和触发使用的功能即可。链表:链表的特点就是更新插入删除节点容易,但是访问必须得一个一个节点来寻找(因为只有知道一个节点,才能知道它的下个节点)而数组可以通过下标直达相应的元素,所以链表可以看作是数组的对立面的。游戏中链表用的也很多,但是很少以链表本身呈现(后面讲)。栈和队列:如果说数组和链表是个真实写出来的物理结构,那么栈和队列就是想象出来的逻辑结构,栈和队列一样,既可以通过数组实现,也可以通过链表实现。栈的特点就是先入后出,后进入的数据先出,概念网上很多,说太多很多人不理解,那就结合游戏讲解。(以下例子其实可以用字典实现,但是为了方便讲解,把我自己游戏中的一个思路展开谈论)我们经常见过很多游戏关卡设计有 拿到一定的条件——打开对应的门或通道 这样的流程,但是在游戏高手面前,很多人有着种种不一样的通关模式,(毕竟没人规定过通关必须得拿到钥匙对吧,只要游戏布局有漏洞,就有人通过不一样的方式通关)比如某湖南长沙人经常利用作图者忽视终点高度比如空洞骑士的速通利用了武器的后坐力这样的通关其实并没有错,毕竟是关卡制作者没想到的,但是身为开发者就需要尽量避免这样的情况,幸幸苦苦做出来的流程,别人30分钟就通关了,然后退款~这就的得不偿失了。那么怎么做到让玩家必须通过达到条件并且条件一定要一一对应才能开启下一关呢?这里面方法有很多,我个人在自己游戏中探索到用栈来实现。灵感来自Leetcode上的一道典型题目:有效的括号这个实现方法很多,但是最简单的方法就是栈,无论你前面有多少个左括号,我只看你最后的左括号开始能否从后到前一一对应右括号就可以判断是否达到条件。这个方法在游戏中也有缺点,不能用在钥匙通道上(逻辑可以自行思考一下)。这个设计我是打算用在怪物身上,强迫玩家按照固定顺序杀怪,否则无法通关,要么重来要么放弃。主要是挑战下极限(折磨玩家),防止如今大众过度追求抛瓦(power)的现象。还想一招秒天秒地,赶紧给我学习微操~(果然游戏开发想怎么做就怎么做,不要你觉得,我要我觉得,打不过不是我的错~)是你的原因~队列:队列的结构是先进先出,最先进入队列的数据会因为后续数据越来越多进入队列而导致数据超出队列的容量,继而从队列出去。还是继续用例子解决。格斗游戏,拳皇大家都玩过,拳皇有个著名的东西那就是出招表,我猜经历过搓招的人应该记忆幽深。一开始我设计自己游戏的出招表只想到了最简单的方式,那就是逐一判断,间接的导致了几个问题:多重if判断语句写法非常繁重if判断速度太快,很有可能键盘输入都跟不上而得开启协程(协程过多不是好事)限制了出招数最主要的就是太过繁重了,频繁的if else判断,看着都头疼。那么就得引入临时结构——队列来帮忙。还有必须用到队列的原因,那就是因为玩家本身。鬼泣大家应该都听过,ACT的动作巅峰,鬼泣的连招也是出了名的多,但是有个问题出现了实际上大部分玩家玩游戏是相对应的,也有很多其他游戏的玩家甚至从头到尾都没按过攻击键,全程就↑↓←→↓←↓←↑↓←→→↓←↓←→↓←↓←↓←↓←→↓←↓……然后游戏就通关了~~所以ifelse判断在我了解过现实情况之后才明白,不能用这么愚蠢的方法,必须用智能点的。怎么在出招表上用队列呢?众所周知,拳皇的出招一般最长的就是→↘↓↙←五键加上一个触发键位A或者B,那么队列只需要记住最后玩家输入的五个键位+触发攻击键位就可以了,毕竟前面说过了玩家是真的很多人都会乱按一通(当年拳皇有多少不知道技能表的人都是胡乱按出来技能的~不知道各位有没有)。队列的特点就很好的在这里体现,先进先出,先前进来的操作就会被后进来的挤出去,队列里面只保留相对匹配的技能触发键。然后~如何匹配对应的技能呢????这里就会说到另一个数据结构,字典(亦或者说散列表)!现实中字典的作用就是为了查找,根据现有信息,快速查找自己需要的字。顾名思义,那么数据结构里的字典也是一样的,根据你传入的key(→↘↓↙←+A),来找你要的value(相应的招式)并传入状态机触发对应的招式(我记得这招好像是拳皇大部分角色的大招了吧)。如果能够在字典里找到那么就直接触发,否则把队列刷新。所以字典也是个在游戏开发中,非常常见的数据结构,队列负责存储玩家最后的输入指令,字典匹配对应是否触发出招,两者的搭配可以做成出招表。最后一个数据结构,树,请看图是不是跟现实中树很像树是个一环接着一环的逻辑结构,以链表作为物理结构(还记得前面说过的链表吗?就是大部分用在树身上),看着这个图是不是很迷茫,实际上换另一个图大家就很熟悉了。敌人的AI逻辑图树在游戏里可以用来制作敌人的AI的,现在游戏的敌人已经很聪明了,都是多亏了树的存在。想要敌人越聪明,就给敌人添加更多的条件,让敌人面对各种情况做出种种判断,树的数据结构解放了策划的思想,想加什么就加什么,想让敌人怎么做就怎么做。至此,数据结构就简单讲解完毕了,其实有简单的也有困难的,但是我想说明的是数据结构本身并不难,只是大家被那些书本搞得太过于复杂。算法:算法本身就像我们曾经的数学一样,1+2+3+4+……+99+100等于多少,如果逐个逐个加的话得计算99次,如果我用前面第一个数加后面最后一个数这样的做法,这样就会49个101+50了吧,是不是节省了一半的计算量。然后我再用等差数列公式(n×(n-1)/2)计算的话就可以得出最终的结果,整个过程计算了多少次?1次。所以说算法就是一个逻辑数学题,好的逻辑可以让计算机用最短的时间得到最终的结果。算法的目的就是为了优化计算过程而存在的,当然算法可以离开计算机而广泛存在于物理界。想要深入的学习算法的话,建议就是在leetcode上把简单的算法题一天刷一题,一个月后就小有成就了。(面试才刷中等难度)设计模式设计模式是一个衡量开发人员水平的考卷,能力好不好就体现在设计模式上了。设计模式的概念看着一大堆一大堆的,实际上结合游戏内容就可以简单的理解了。下面说说我用过的设计模式,不分先后顺序,设计模式只为了解决实际问题而存在的。命令模式:大家玩游戏时应该见过跨平台游戏吧,那种发布在PC/XBOX/PS/NS上的游戏,不同平台的主机对应的IO设备都不相同。(PC大部分用键鼠,其他的三家都是用手柄,并且PS与XBOX有键位上的差异)但是游戏本身的功能键位是相同的啊,比如奔跑,跳跃。难道要开发者为了4个平台一一制作对应的键位吗?这种脱裤子放屁的行为显然增加了开发者的麻烦(反正都是放屁,为啥还要脱裤子呢?),所以就引入了一个概念,操作指令与输入设备解耦,游戏只需要提供了操作指令,至于传入的硬件操作是键盘还是手柄,那就不是开发者定了,而是由使用的户来决定了。当然开发者还是得专门为平台设备做适配,(震动反馈很重要,做不好会让对应平台的玩家体验极差),但是指令的本身就不需要绑定设备了。命令模式还有一个很重要的功能就是序列化操作,比如现在的竞技游戏都有着回放功能,回放功能实际上就是从服务器下载击杀者死前所有玩家的操作指令,而不是下载别人电脑的显示画面(要是LOL需要同时下载另外9个玩家的画面那得炸掉多少服务器啊)。下载好9个指令,然后让本地计算机根据指令模拟死前发生的事情就可以了。观察者模式:以前从来没鸟过观察者模式,单看名字觉得就是个多余的。然后真正理解过概念后才明白,观察者模式是非常重要的。当数据变化时,及时通知需要数据的对象。常见的例子,就是游戏中成就系统,一旦达到某一成就,就会及时弹出来。这里面呢观察者并不是一直常驻内存中时刻检索信息的,而是像任务系统一样。比如有个存储杀敌数1000的任务,哪怕存储杀敌数到了999,观察者还是无动于衷,当到达1000时立刻就把成就发出来,基本上算是个蹲点做事的。这里面观察者就是计算机,被观察者就是杀敌数。所以观察者的响应速度是最快最及时的,因为全程就这么一个任务,而且成就任务又不是常有的,一局游戏下来最多也就3-4个成就,但是就是得有个这样跑腿的家伙给玩家提供成就信息。(玩过PS都知道,玩着玩着突然就弹出一个成就,有时候成就内容本身都没人在意是否有过这样的操作~)单例模式:游戏中有着各种各样的系统,比如音乐,物理,任务,对话等。这些系统各司其职,互不影响。单例的描述是一个类只有一个实例,目的是避免过度的让程序糅杂在一块,但是单例在许多游戏中经常被滥用,经常被滥用的就是结合了静态类常驻内存中,让内存一大部分处于运行状态,(电脑8个G,除去系统,开个游戏占了7个多G)。单例在游戏中最常用的就是音乐了,游戏有的一关到底,有的地图无缝衔接,更多的还是不同的加载场景。经常性加载场景,并不需要把所有东西都重新加载,比如音乐,最多就是播放的BGM不同,大部分打击怪物的音效都是相同的,每次都重新加载就会相当耗费实际,那么就需要写个静态单例让音乐系统常驻内存就足够,反正全程游戏下来音乐都是要播放的。静态单例的好处就是把简单的,常用的功能常驻于内存,让系统调用方便,但是如果把所有的独立系统都做成单例,那么就会让内存瞬间被占满。所以单例一定要慎用,尽量把单例留给那些简单的功能而不是留给全部的独立系统。状态模式:这个内容我以前的文章有讲过,就不再赘述。想看的可以去看状态机其实做给主角的攻击动画或许比较好,但是做给敌人AI在2020年的今天就没那个必要了。当然状态机结合树一起使用可能更加棒,毕竟数据结构不是死的,用的好可以让计算占用更小。对象池模式:我们游玩过许多FPS游戏,都可以发现,游戏中用的最多的就是弹药和特效了。如果说每一次都新生成弹药,那么当交火非常激烈的时候就会导致电脑突然卡住。原因在于现在的开发语言都是高度封装的,如果没有准确的释放内存的话,不断新生成的子弹就有可能没法正确的销毁从而导致一直在内存中,并形成碎片。这样的话不管加多少内存都不够解决这个问题的。因此就引用了对象池了,大部分人玩CS时有没有想过第一个弹夹打的30发子弹其实就是后面3个弹夹打的子弹呢?(或许CS有别的处理,我还没了解过)对象池就做到了,反正打来打去开的枪也就是一个弹夹,为啥不把同样的30发收回留给后面的弹夹使用呢,大家觉得如何?设计模式其实还有很多,暂时我就把上面的说的全部用过了,好不好不知道,但是解决了我遇到的问题。开发模式开发模式读于标准的码农,一般不需要这个,这都是产品经理管辖的内容。开发程序是有目的的,有需求的,有需求就得科学的规划。身为独立开发者,如果连软件开发的开发模式都不了解一下,就会在开发中遇到各种软件问题。总结一下开发模型的几种:瀑布模型,迭代模型,敏捷开发,增量模型,模型定义很多,但是遇到过的就四种。我的专业虽然有软件设计师的内容,但是还是缺乏大厂经验,无法深入的理解开发模式,然后就在开发项目中遇到过非常多的棘手问题。问题1:开始的时候以为自己是迭代模型,实际上是瀑布模型。瀑布模型存在了几十年时间,经得起时间的考验,哪怕现在没人用了,但是瀑布模型的思想依然符合大部分的开发者。大部分人开发游戏都是立项——确定方案——设计框架——编写框架——反复测试——产品发布,这一流水线。但是问题就是独立开发者如果也采用这个方案会有着致命的缺点:因为经验的不足会导致产品以为会按照自己的方向发展,其实大部分产品的方向都是会偏离方案的。瀑布模型的致命缺点就是一旦到了后续发现问题了,那么想回去重新修改内容将会非常困难,因为反复测试阶段不能立刻条回到方案阶段,必须得从框架推导回去,否则一大段游戏代码将作废。(我第一个立项做FPS游戏就是这样,因为知识还没开始巩固就做了FPS,导致后期整个项目耦合太过严重)问题2:忽视了敏捷开发带来的好处一开始总觉得,做游戏就得详细的规划,不应该随便,但是后面发现,如果在原游戏上尝试新的功能,极有可能导致游戏崩溃或者出意外,而且这个崩溃大概率会导致一连串的反应比如全部脚本变量崩溃(所以可以的话尽量不要依赖别人的插件)。这时我就在想如果单独剥离出来游戏里的一块内容,放在一个测试环境中那得多好。然后就探索出来了两条路,一条是用GitHub进行版本控制,可以怎么折腾都行。另一个就是敏捷开发了,敏捷开发的概念也很多并不具体,不过顾名思义也就是轻便开发,为了达到某一目的用最短的时间进行开发。我就经常为了实现各种工具而做这样的开发,实际上很多小项目只要完善起来又可以做新游戏了。(曾经想要单独实现AI,就用了第一个2D游戏做,结果游戏耦合太过严重,导致我又得重新设计敌人的框架,额外花了10多天)迭代模型的话就比较符合游戏开发的逻辑了,搭配GitHub就可以任意的折腾项目。下图为迭代的概念所以不难分析迭代最大的问题就是风险,但是独立开发游戏基本上免除了所有的沟通成本,并且独立开发游戏中独立制作者是全程能把握开发进度的人。按需求来讲其实独立制作人的需求既是确定的,也是模糊的,确定的就是游戏的风格和游戏的玩法,唯独不确定的就是能不能够实现玩法的相关功能,并且要做好功能无法实现而需要为原本的游戏玩法进行修改的准备。最后就是增量模型了,增量模型其实跟迭代模型都是非常相似的,唯独不同的就是增量模型必须得是需求明确的。一旦出现需求不同,或者需求修改,基本上增量模型就会失效。增量模型比较合适有诸多项目的开发者去做,因为有深厚的经验可以直接就明确出来游戏的需求能通过增量模型实现开发者速度效率最大化,而独立开发者极大概率不能够把握开发的方向,甚至都不知道会进入何种方向。总结:开发模型是死的,人是活的,不必一步一步跟着模型的概念去做,要从失败中总结经验,早日摸索出合适自己的开发模式就是最好的。4.数据存储,计算机网络,信息安全这块内容偏向的是游戏后端,跟前端是可以独立区分开的模块,但是无论前后端,都是以服务游戏为主。数据存储:这个太常见了,人物的属性,装备的属性,背包,仓库等等,都是一系列的数据存储。存储的方式也有很多种,表格,文件,数据库,那么游戏开发如何取舍呢?这里就得看项目的要求了。比如用unity,只是简单的一些剧本,对话之类的需要用到json吗?不需要啊,直接用软件自带的scriptableobject就可以做了,还好用。然后就是武器属性,装备属性类的,这些需要根据测试反馈频繁地修改,甚至发布后也得因实际情况而经常更新的,那么就得用xml了,但是xml不安全啊,很容易被恶意修改,那就用可以加密的json咯。需不需要数据库呢,这里我觉得按照工作量来说,没必要,数据库一般面向的是超大量数据,用来存储装备属性有点像杀猪焉用牛刀,能减少工作量就不错了,难道还有人为了秀技术而用sql的吗?这不是没事找事干嘛。这里要单独来讨论数据库,如果需要用数据库存储那遇到的可不是小问题了,而是会面向大量的数据才需要用到(几百万数据或者几千万以上)。一般在网络游戏中用到数据库是非常多的,因为既要确保数据安全,又要与客户端不断地存储读取大量的数据。它可不是简单的增删查改,他的本质是数据结构化,数据之间具有联系,面向整个系统;数据的共享性高,冗余度低,易扩充;数据独立性高。总之数据库是个很庞大的系统,工程量也很大。开发者可不能简单的说自己用的是数据库,因为一说到自己用数据库,别人就会想到用的是配套的Linux作为服务器(商业好像是centOS版本,不是Ubuntu版本),并且得专门的去学习shell的写法,然后在Linux上懂得处理进程(这个可不会有window任务管理器这样的好东西的),并且得为服务器制作好日志表,分配好权限,配置好防火墙,这一套系统下来的学习成本也不亚于C#+Unity了。至于为啥不用MSSQL呢,主要是收费的问题,业界大部分都是喜欢开源免费的东西,Linux+mysql就成为了国内最喜欢的数据库系统,也有配套的成熟方案和视频。所以独立开发者我的建议是尽量避免数据库,当然如果实在需要数据库的话得时刻确认自己有没有资金支撑起来一连串的技术成本。计算机网络:在这里也可以叫做游戏网络,这个我才刚刚开始研究,但是我开发游戏绝对会放弃联网模块的,因为我没有钱支撑服务器。不过总得了解一下,网络传输有TCP和UDP,一个是安全传输,一个是快速传输(两者对立的)。一说到网络,又要说到服务器,游戏服务器有状态同步和帧同步,状态同步的逻辑处理端在服务器上,然后下发到各个客户端。大家熟悉的LOL就是这样的,逻辑处理端在服务器上,那就避免了外挂满天飞的现象(因为服务器会自行判断玩家传来的操作是否合理,不合理就驳回),所以LOL还是挺公平的游戏(不是绝对公平,因为如果敌方用的AI脚本的话,基本上玩家没法对抗的)。帧同步的服务器,只负责把客户端传来的指令转发出去,不负责处理里面的逻辑细节。这样就会导致另外的问题,外挂太可怕了~什么无影脚,原子弹啊,坦克啊,只要能想到的,外挂都给你做出来。直接把一个游戏都能毁了。目前市面上的游戏服务器得根据游戏运行环境而定,比如CS,LOL这种游戏,因为玩家普遍在PC端,PC端网络连接很稳定,那么可以用状态同步。而王者荣耀在手机,手机的信号时高时低,非常不稳定,那么就用帧同步传输,那王者荣耀是不是可以开挂满天飞了呢?这个我猜各位打过手游,可以想想外挂现象多不多,也不用我解释了吧~现在的网络,其实已经很混杂的地步了,一言半语说不清。但是有个地方想说的注意!5G是不是未来云游戏的强大助力?很多人问5G会不会引发下一个革命,让游戏进入云时代。这个问题必须要探讨5G的本身。5G是什么东西?5G网络(5G Network)是第五代移动通信技术可以让下载速度非常快,并且拥有低延迟特点。听到这里,很多人就想到了5G可以解决游戏很多问题。1.云游戏问题。很多人想象中的5G概念是这样的,家里的电脑游戏->5G上传->5G传输->5G下载到现在的设备->实时在显示器中显示游戏当前进度。然后操作的流程是这样的现实鼠标输入操作->5G上传->5G传输->家里的电脑5G下载操作指令->电脑游戏实时操作是不是听起来很完美的解释方案,但是这里有个致命的问题。谁负责把画面调用出来,谁负责接收数据,谁负责上传数据,谁负责读取传入指令?中央处理器(又名为CPU)!!!!千万别说5G能帮你包办所有,哪怕两端是单纯的IO设备,中间也得有一个专门负责处理事情的对象,那就是CPU。说到这里我猜很多人应该明白一件事,自始至终5G只是个传输的技术,它的作用在于传输速度快,传输时延低但是真正处理事情的并不是5G本身,而是中央处理器才有这个能力处理的。回到探讨这个方案的可行性上,以后用云玩3A大作,一张4K图片多大?按照游戏画面,普遍一张高清无压缩的4K图片大概有800多万像素最低也得8M大小,往上不封顶。然后一秒钟要生成60张图片,也就是一秒钟得上传480MB的文件大小,(当然可以进行压缩,也可以60帧换成PS4的24帧,但是这里暂时不讨论)面向端也得同时间瞬间解码出来480MB的图片文件。这里有个知识点,数据传输是必须经过编码把数字信号转换成模拟信号,然后在终端把模拟信号解码出数字信号才能显示画面的。数字信号可以看成计算机的数据,模拟信号可以看作网络,光纤,电磁波。这个数据量可以说非常庞大,还是在理想状态下。处理如此众多的数据让CPU单独处理显然不太现实,CPU是广但是不精,真正精通编码解码还得看GPU,GPU可以极大的提高解码效率。所以传到显示器上也是可行的(索尼已经实现过云游戏),但是问题来了,本质上我们玩游戏的流程是这样的。电脑输入操作->通过键鼠传入CPU->CPU计算逻辑,然后发送指令到GPU->GPU进行图形计算把画面传到显示器->显示器反馈给玩家当前的游戏状态。这个顺序可以不用来回传。但是云电脑在最后这一步添加了一系列操作,又要顺带把编码发送过去,终端接收到也得快速解码出来~这样玩一个云电脑,不但要付5G的费用,又要花两套以上的主机设备钱(一端负责编码,一端肯定得有硬件负责解码才能显示,来回传的消耗很大的),这么有钱还不如直接买个3500块钱的PS5,随身携带还方便,又能实时8K60帧,又好玩。然后从这里延伸出一个问题,全部都让中间商(提供服务的运营商)的处理不就完了,不需要两套设备啊。这个问题我想说的是,各位以为的服务器是是怎么样的???CPU是I9-10900K的集合,GPU是堪比RTX3090的存在,内存几百G以上。这样还不能解决我前面的问题?这里我得问,这个电脑是只有你一个人用的吗?云电脑普遍都是想着搞两套主机方案的,一套主机方案的就是马云的残影了。但是一套主机方案非常考验服务器运营商的压力问题。这样的高端配置,如果只为了玩家而设立,大概率会亏到老底都没得剩。运营商开放的价格亲民吧,中国14亿人口,我就算主机游戏玩家100万好了,100万个人分摊下来的服务器还能得到多少的算力,100万个I9还是100万个3090??有哪个运营商有这么雄厚的财力,几百个亿做了个云电脑,我还不算这个天价的维护费。中国的玩家大家也不是不知道,看看《黑神话:悟空》的提问可以看出来,出钱是不可能出的,白嫖就有自己份。一个一个说中国的希望,结果不断地压到200都嫌贵,这样的环境能给运营商带来什么收益?还不如云电脑开给马云老板,人家分分钟几百万收入。所以服务端云电脑出现本来就不是为多数人准备的,而是少数领域使用的。别再幻想了。2.5G能解决超大规模战斗吗?有的人应该是玩过那种几百人国战的游戏(游戏名我就不说了),觉得5G可以解决这个问题,但是这个问题本身考验的不是传输速度,又是CPU的处理能力。几万人的大规模战斗假设用FPS为例,我就用UDP+帧同步来计算好了,让服务器瘦身。一个UDP包的大小我最小最小按照200B算吧(现实肯定KB乃至MB以上),两万人,那么加起来一帧动画就有200B×20000个文件,一秒就得×60,服务器一秒钟受到200B×20000×60个包,我也当作服务器能容纳了。但是接下来的操作是什么呢?有没有想过??那是得为每个用户提供另外的19999的包,也就是要转发200B×20000×60×19999,哇这得多大啊。就算服务器能处理过来,个人计算机不会炸掉啊?然后说用魔兽世界的那种局限地图咯。我真的很无语~我明白那个意思,(所谓的超大规模的战斗其实就像打一场现代战争这样,真实又刺激的那种),但是如果能实现业界早就出相关的作品了,但是战地现在不也才64个人实时对抗吗?这个问题本质上并不是传输速度不够快,也不是传输有没有延迟,而是现阶段的CPU根本无法处理这么庞大的东西~要是真的能处理早就出对应的游戏了,使命召唤都可以出到现代战争10了,活脱脱的一个新时代红色警戒~这么蠢的问题,信不信我用锯齿刀砍你3.说的5G很没用,为啥(国)推动5G发展(有点像杠精)?这个问题非常好解答,这个不是必然正确的问题,也不是什么技术问题,而是现阶段全球经济下行必须推进的方针之一。我从警校学习了四年学会了一样东西,只要存在私有制的地方,都可以尝试用推导利益关系的方式来找到收益方和吃亏方。碰巧遇到一个提问,已经符合了我去年的猜想:大基建计划大家都应该听说过吧。目前全球经济下行,破发的货币已经把整个世界的未来都透支了。当年经济危机直接导致了二战的发生,但是战争是没法解决问题的,只是把矛盾暂时转移了。这时期有个人出来,提出了复苏计划,这个人就是罗斯福,他带来了罗斯福新政。美国街头大量无业游民,新政府通过干预经济的方式,让底层人民重新获得工作的机会,获得了收入的人民就会去消费,只要能消费,社会经济就能重新运转起来。也就是流动性,只要有流动性,资本市场就不会枯萎。今年的环境我猜各位有目共睹,六保六稳,地摊经济,一系列的倒闭潮,我就不再多说了,有体会的就深刻明白现状,没体会到的可能家里有矿或者家里有人吧。(找工作是真的难,要求达到天际至少中级工程师,工资压倒最低3000,还早9上到凌晨1 2点,大小周,我卷不动了~)国一直注重基建,哪怕贴钱也要基建,翻新又翻新,造了又造,其实本质就是把钱取之于民,用之于民,把钱重新花在劳动人民身上,让人民去消费。(虽然槽点多多,但是我是由衷地支持国家的政策,底层的劳动人民是很辛苦的,我还有时间考编考公都是因为老爸还有一份司机的工作)。但是本意是好的,到了下面就开始变味了,大部分人开始爆炒房地产,把泡沫吹的高了又高。基建成了,带动了物流,运输,互联网一系列发展,但是房子升到了天价,泡沫大到一戳就破,人民被房贷压得喘不过气,消费都被极大压制了。现阶段的问题跟当年的经济危机像又不像,都是底层消费不足,经济流动不起来。为了软着陆,那么就得让钱真正流入到底层人民手上,只要人民有了钱,才能去消费,所以就有了新基建。新基建的是为了避免再发生钱流入房地产,把钱用在实用的地方。新基建的项目然后回到5G上面来讲,5G本身成功与否其实并不重要!!它带来的技术有概率产生新的科学技术,但是它失败也无所谓。按照上面我说的利益推导,得利的是谁?国与民营企业与底层劳动的人民,亏得是谁?三大运营商的钱包。也就是说5G本身来带来所谓的技术革命并不是国真正关心的重点,重点是推动5G建造的话,钱可以让民营企业,劳动人民获得,这样就足够了。(只要人民有钱就不怕人民不消费)至于结果会如何,这就得以后再讨论,是提升还是噱头,当经济衰退的危机过去以后没人会再关注这些问题(大家都会朝着下一个风口前进,还有谁管当年的东西)开发者不但要有技术,还得时刻关注国家的动向,不然稀里糊涂的就跟着搞5G游戏了。最后说到一个内容,就是信息安全。学过了信息安全才知道这个世界上存在着两种软件,一种是已经被破解的,一种是不知道自己已经被破解的。任何软件都是可被破解的,只是成本问题。unity的游戏被反编译是很简单的,知乎上搜索 “空洞骑士的素材”,不管怎么加密的文件,都可以被反编译出来,这里的具体细节我就不再赘述了,具体可以学习一下ILdasm的用法。你懂的,我就不多说了哦~如果这个游戏真的对自己很重要,那么必须得寻找一些大公司提供软件保护。如果觉得保护费过高过贵的话,那最低最低也得学会《计算机软件著作权》这本书,想办法申请一些专利,小公司盗版无所谓,遇到4399那些抓包盗版的就立刻举报。PS:版号就不要考虑了,这玩意还是未来有红利再说吧~游戏被盗被破解是必然现象,所以不要再幻想用什么D加密,什么达文西密码能保护自己的软件。一定要在软件有限的生命周期里完成自己的目的,这才是独立开发者必须清楚的。5.计算机图形学,架构其实这两块是未来的方向,现在谈论这个还算比较早。但是也知道游戏开发走到最后要么搞渲染,要么搞架构,不然就只能转岗了,几年后还搞逻辑开发的可能也就我这样的独立开发者了。说内容前就得说一下渲染,其实渲染这个内容,归属于TA(也就是技术美术的范畴),T为辅,A为主,我这种还是懂得写一些着色器就算了,真的要探讨美术的话(我可能真的没那个天赋)计算机图形学:其实涉及到这块内容就得学好数学中的矢量(也或者叫向量),坐标系,点积与叉积,最主要的就是矩阵!矩阵可以说是计算机图形学的核心,我一直以为图形学的核心是矢量,结果看了矩阵后才发现,短短的4×4就可以把所有的矢量囊括了。同时矩阵也是数学领域最难的地方,有天赋的小学就能明白,我这种无天赋的,可能一辈子也不会明白吧。天才是百分之99的头脑+百分之1的汗水。——爱迪生架构:架构师很多人都听过,架构师就是有着丰富的开发经验的人(有点像经验丰富的软件设计师的感觉),搭建架构让手下开发者按着架构来开发,可以事半功倍。现实中有没有著名的架构可以提高效率呢?肯定有的。游戏一般以单线程为主,因为游戏不需要比拼计算机处理速度,比的是顺序逻辑处理。多线程在游戏中就是个附属品,用在加载场景,下载资源等简单的用途之上,这就让其他核心无事可干。现在有了新的架构,著名的例子就是《守望先锋》采用了ECS,这个架构可以解决多核问题,核心越多,游戏运行的越流畅。当然ECS架构目前只是公开了概念,而源码暂时还是不公开的。所以业界中也仿照ECS做了尝试,比如unity的dots,就是一种尝试。但是并不多,因为实现的场景有限。随着未来CPU核心越来越多,我觉得ECS架构应该也会成为未来的重点。但是我一直强调过的,任何的程序和架构都是服务于游戏为主的,单线程虽然消耗性能,但是能让游戏顺利的运行,就已经足够了,杀猪焉用牛刀!?最后,一年下来,游戏开发得让我学会很多东西。策划,程序,美术,音乐,法律,逻辑。音乐,不要求会做,但是得会听,不要胡乱的选择BGM和音效。法律,一直以来大家都说法律是只会保护有钱人的。而我的学校一直有句话,法律从来只会保护懂法的人的。逻辑,不讲逻辑的人极大概率在沟通上会浪费相当多的时间,懂逻辑的人可以更加的明事理。不懂逻辑连国家意志和政策都看不懂~~知识是无限的,时间是有限的,学到老活到老,学会了游戏开发也算是多一项技能,毕竟我也不知道未来何时会被裁员,被下岗,甚至未来会不会发生战争。居安思危才能驱使人类进步,等到危机来临时,再多的财富可能也会转眼瞬逝,真正还属于自己的就剩下思维敏捷的大脑和强壮的身体了。}

我要回帖

更多关于 编写一个程序的步骤 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信