大家具备了游戏程序基础的能力,然后语言,引擎,这些结构,模式的能力之后,在实际工作中,除了做自己的工作之外,还要考虑哪些东西呢?
游戏客户端开发的技术层级
大家可能上来都做客户端。或者有些极少数的同学可能对『服务器』比较感兴趣,可能你的代码功底也比较好,说不定也会做『服务器』,但是都一样。
如果我们做的是客户端,客户端主要有这么几个方面:
✅难度最低的是UI。
绝大多数人刚入行的时候,大概60%的人刚入行的时候做UI,UI说实话没什么难度,最基本的一个工作。
✅稍微难一点的是游戏逻辑,就会涉及到一些结构算法这些东西。
✅再往上涉及到网络了,因为现在的游戏基本都是网络游戏了。单机游戏也有,小游戏比较多。
真正的稍微大一点的游戏呢,基本上都是有网络通讯的,不管是强交互,还是弱交互,多多少少都会有一些网络。
然后,如果是3D的话,还涉及到骨骼动画,动作的流畅度,尤其是现在动作游戏比较盛行。那还涉及到更多流畅度骨骼动画,然后这种你各个动画的回调事件,怎么让它的编排的流畅,合理这些东西。
如果是VRAR的话呢,那还要需要涉及到我们的一些这个VR的空间定位技术,VRAR应该都会涉及到,但它两个不太一样。
👉VR的话,是本人的坐标系的游戏坐标系的一个定位技术。
👉AR的话,它可能直接涉及到这个直接的真实空间定位技术。
这是我们客户端的一般来说常见的要做的一些事情。是属于一个初级程序员都会涉及到一些东西。
✅然后再往上,那可能就是你比别人强的一些地方,比如说,如果你在做客户端的时候,你还会一些效果。
我们做一些这个shader的编写,然后做一些材质的优化。
如果你是逻辑范围比较擅长,你跟『服务器』打交道,你需要知道怎么跟『服务器』打交道一些对应的模式。
如果你是跟数据有关系,那么你要知道数据的加载。或者说,如果后端的话,真正的是做后端的话,是『服务器』逻辑的情况下,那么数据库的管理这些东西对这些都属于一些额外的能力,也是大家以后的一个方向。
游戏客户端与其他部门的协作
除了我们的客户端程序开发之外,那么游戏里边分工:
👉主要分工就是程序,程序分前端后端。
👉然后策划,策划分很多,关卡策划,数值策划,主策,然后活动策划等等。
👉接着美术,美术分的也挺多,原画,模型,UI,特效等等。
那么他们这些工作跟我们程序开发是怎么交接的?有哪些交互?大家知道这些也是有好处的,方便你在工作里边就是减少沟通成本。
其实以后大家工作的时候你会发现,最头疼的不是这个东西有多难做。多难做的话,反正你只要有方案了,都能找到解决办法。最头疼的是你跟其他部门的沟通。
比如说我上一家公司,有一个这个初级程序,应该算是个新人,其实他干这行也干了有些年头了。但是我们有一个功能,然后我知道他对这个功能不是很熟悉,因为他新进来,他对人工智能不是很熟悉,然后呢,也知道他的技术能力,让他自己去规划也不一定能把东西全部弄好。
然后,在之前我已经把这个功能应该做哪些东西,流程是什么样子的,哪些模块流程,我都跟他说好了。我把文档都写好了,流程也都给他了,告诉他应该怎么做了,哪些东西做会引起什么样的问题,也跟他说了一遍了。
说的时候,挺好的。然后做的时候就完全按照自己的想法去做,做出来呢又是一堆问题。有些东西,事先都已经说好了,他不按那样做,按照自己想法做,果然出了那些问题。
所以,还有一些呢,比如说策划,他提方案,就对于策划来说,他本身提方案,他其实是不管你程序是怎么实现的。所以以前我们经常出现很多笑话段子。因为策划对于它本身来说,他不了解程序,他只管提想法,他不管你这个东西怎么实现,我就是要这个效果。至于怎么做,你去做,这很正常。
很大一部分是这样的,所作为程序的你怎么来说呢,要了解,你可以大概了解一下策划的模式是什么样子的。同时,你跟他沟通多了,你也可以跟他说,我们做的东西应该是什么样的,你怎么实去实现它是什么样的,或者说你说的一些想法,你不符合实际的逻辑。
我们在意的重点是什么,以什么样的其他方式也能实现这样的效果,但是它会更合理一点,所以大家对别的一些工作,你有一些了解的话,能减少我们的沟通成本。
游戏『服务器』与客户端有哪些区别?
首先客户端,『服务器』区别于客户端。
✅客户端是什么呢?客户端是一个人去玩的,就是说你的代码运行,是运行在我们一个端上的一个终端上的。你手机也好,PC也好。
✅『服务器』它有一个最大的特点是什么呢?它是所有的用户的数据都是在『服务器』上的。所以『服务器』它比较聚焦的是什么呢?聚焦的是你整个逻辑的,但是它还有一个特点,你客户端只运行一个人的逻辑,『服务器』运行的是什么呢?
运行的是所有人的逻辑,所以『服务器』一般来说,『服务器』要求代码的健壮性、可扩展性。
什么叫健壮性?健壮性就是。我如果这个有问题,你一个人的运行的时候,可能这个问题它不重要,它不会被放大,但是『服务器』的这个东西呢,它会概率会被放大成千上万倍。
而且,一旦出问题了之后,你客户端崩了,顶多就是你这一个人的事儿。『服务器』崩了,那是所有的玩家的手。所以说就是写代码一定要健壮。
不怕代码写的多,我以前一直跟学生说,好的代码是什么呢?好的代码是不出错的。代码不是说你写的行数越少越好。
不是说所有的代码我写的越简短越好的,不出错的代码才是好代码。
所以,代码是一直重构的,包括我们在写代码也是的。你在不同的开发阶段,在不同写代码的阶段,都是要回来再重构的。这个也是大家的一个提高过程。
然后『服务器』它的功能是这些,然后『服务器』和客户端交互的时候要注意什么呢?
不知道大家接触过设计模式没有,其实『服务器』它是一个下命令的人。客户端它只是一个什么呢?
如果我们以MVC来说,MVC模式不知道有多少同学知道的,MVC,M是数据Model,V是View表现,C是Controller控制。
那它是一个什么样的概念呢?数据归数据,表现归表现,然后通过控制把数据发送到表现。简单来说,比如说我这是一个前端客户端,那我要做的最简单的事情是什么呢?我从『服务器』拿到数据,然后把这个数据显示在UI上。这就是一个最基本的东西。
那你在前端表现看到的是不是真实数据呢?不一定。不一定是真实数据。
什么意思?比如说我在前端,我给了一个用户,我发了一个数据,我发给『服务器』是10,大家的观念,『服务器』这个东西,返回客户端就是15。
我们拿抽奖为例,我这个抽奖概率我就是1%。那照理说我抽了100次了之后,那我是不是就应该中了呢?我这个数据我就1%我就发给『服务器』了照理说那我就应该中了,对不对?但是实际上一定吗?不一定,你要看我的『服务器』是怎么处理的。
我『服务器』处理完之后,发回给你的数据不一定是1%。他有可能是VIP10级他才1%,所以说,其实是前端是没有任何自主性的。理论上来说,前端就是应该你做任何事情都是发送一个请求,就是发送一个协议,通过协议发送一个请求给到『服务器』。
然后,『服务器』把这个数据处理完了之后,这个数理库这个数据不管怎么处理的,我给到你前端。你前端就是无条件的把它显示出来,不管它是对的还是错的,我拿到什么就是什么。我给到你前端是什么,你前端就是什么,就是显示,所以说这是这这我们正常的实现的一个模式。
但如果大家做单机游戏,就不一样了。单机的话,是什么呢?
你自己本地,你把这个数据处理完了,然后直接交给下一步去显示了,是不是就没有这个中间过程?就是以后大家以后大家真正的去涉及到联网游戏的时候,这个思维模式,就需要你们知道有这么一个东西,那么前端的话呢,它其实是无条件接受的,你们要知道中间有这么一个过程。
就是了解不同岗位的一些这个技术特点还有一些流程。那大家自己以后在写代码的时候,你知道的东西越多,你想到的东西越多,然后你以后在工作当中的表现就会越好。
那别人犯的这个错,你没犯是吧?别人没想到的这个东西,然后等出了错了,然后回头再去修改这个东西没有。你的你的效率就比他高,你的表现就比他好。
技术美术 (TA) 的岗位特点
还有技术美术的岗位的一些对应的特点。那主要是首先它本职工作是shader编写。
但你要说简单的shader我也会编一个。其实shader难在哪?难在里边的算法。
真正的技术难度难在里边的算法。简单来说,就是通过各种各样的计算把我们的最后图像,图像都是一个一个像素最终显示出来。比如说一个屏幕,我的屏幕1920×1280。那么它就有1920×1280的像素。就是两百万个。两千两千乘以1000,大概200万,那我们计算的时候,其实就跟每一个像素都要进行计算,然后计算它的最终位置,颜色这些东西的,然后简单来说就是这个,所以所以它算法比较重要。
那实际流程就是什么呢?实际流程,无非是安排他的位置,安排它的颜色。简单点说,就是这个。复杂的是什么,它的位置在哪儿?它的颜色是什么?但是你要说如果它的位置在哪,颜色是什么,有现成的东西可以用。那你能不能shader呢?
你是不是也会写shader?如果我知道这个东西它的计算结果,或者说我知道有一个公式,我只要套这个公式,我就能把它的位置和颜色得到它的位置和颜色的结果,然后出现一个什么样的效果,所以说用这个东西并不难,对吧?
但同样的道理,那我在做这个游戏的时候,我要一个效果了。但这个效果,我是不是一定要求这个技美去给我写一个这个效果?我能找到这个东西,我会用它是不是也能也可以在游戏里边体现出来。
所以说大家解决问题的思路要灵活一点。其实关键是这个东西干嘛用的,我要用我要用它来干嘛,对不对。而不是说这个东西是怎么实现的,有时候我要用它,我不一并定要会实现它,对吧?
无论你选择客户端、『服务器』还是技术美术方向,理解整个游戏开发的技术生态,将在职业生涯中走得更稳更远。