游戏引擎是什么?怎样开始做一个游戏,需要用到哪些技术?
我想操作寒假制作一个游戏,(之前上课用c#什么的做过连连看,但是是winform),对于制作一个游戏完全没有想法?请指教。 hi~ 我们邀请了网易游戏雷火的资深引擎渲染同事回答了这个问题 以下是他的回答:游戏引擎是什么?问这个问题,想得到回答的人应该是刚入门游戏行业的新人。对此,直接推荐一本书,这也是很多大佬都已经推荐过的,读完之后应该对游戏引擎就有比较全面的一个认知了。对,就是这本《游戏引擎架构》,现在有第二版了,之前一直读的是第一版,两本书的图都贴了一下。
怎样开始做一个游戏,这里也假定出发点是从程序开发角度,也就是纯技术角度。毕竟策划、美术如果也牵扯进来,那要学的东西还真是多的不行。
开发角度,其实也是分两种类型。一种是:知其然,也就是任务在身,想早点完成各种需求,把游戏做出来。另一种是:知其所以然,也就是想知道很多底层实现是为何,想花时间弄得明明白白。
对于第一种类型,很直接的推荐就是使用商用引擎unity、unreal,赶紧下载一个,官方文档看起来,官方游戏demo运行起来。网上现在这两个引擎的资源和问答非常多,很多问题都可以在网上得到相关回复。当然最重要的一点:请自己动手做,就算是照着文档一步步走也都行,不要停留在看上面,实践第一位。
对于第二种类型,要关注和学习、补充的内容就会多很多。游戏开发需要使用的技术,基本是一个大杂烩,就是你大学有学到、没学到的各种知识都可能会运用到,甚至包括很多人觉得没有用的数学和硬件知识。当然,这些都不是必须的。而其中最基础的能力我想是:
1. c/c++。很多游戏内核都是用c、c++写的,而且这也是大部分人大学的必须课,读懂基础代码必不可少。如果对于语言还不是很熟悉的同学,建议可以阅读下这些经典书籍:
入门级的C++ Primer Plus
提升版C++ Primer
2. 数学。游戏引擎,不管是渲染还是物理,甚至很多效果,都离不开数学计算,不要求精通,但是至少对于一些常见数学知识能有概念,否则很多文档看得都云里雾里了。最基本和需要了解的应当算线性代数了,里头矩阵、向量计算对于理解游戏的一些计算帮助意义很大。
3. 一门脚本语言。python或者lua是游戏中最常见的脚本语言。不管客户端、服务端开发都会用到。并且在实际工作中,用它们写一些小工具也是非常好用的。简单语法入门,这几个网站可以花几小时过一遍:
Python 基础教程 | 菜鸟教程Lua 教程 | 菜鸟教程https://www.w3schools.com/python/有了这些基础,那到底怎么学习或者开始呢?
概括为八个字:“循序渐进、实践落地”。
怎么一个“循序渐进”?
第一阶段:熟悉自己项目的引擎或者找开源引擎进行使用。这一阶段,不要求研究太深,先学会用。可以对照《游戏引擎架构》的各个部分来熟悉、使用引擎。
主要目的——熟悉整个游戏引擎的各个方面。
第二阶段:在某个领域扎根,做深入。可以是:物理相关,柔布相关,UI界面相关,植被相关、人物表现相关、动作相关、特效相关。因为大部分人精力有限,不可能一下样样精通。虽然说只是强化某个方面,实际上游戏各个环节环环相扣,在了解熟悉一个方面的时候,你对其它环节或多或少也有不少了解。这个阶段,还需要阅读大量相关领域的博客或者论文,最快的速度让自己在某一方面有所建树,这也能够提高自己的信心,毕竟游戏要学的东西真的太多,如果一下想吃成一个胖子,很可能很快自己就迷失了。很有效的一种方法,就是先和同事前辈取经,先找对路,然后再深究。如果一开始找错地方挖井,挖再深可能都不一定有水喝。关于这部分,渲染方面有几个优秀的博客大家可以看看:
CSDN-专业IT技术社区-登录主要目的——不慌不忙,由点入手,深化游戏引擎的认知。
第三阶段:阅读自己项目引擎、开源引擎的底层实现。在有了第二步的基础,基本上对引擎有了初步的认知,在第三阶段,就可以将原来很多比较模糊的概念完全细节化,了解其中实际的实现奥秘。
到这个阶段,可能很想多补充能量。我想milo大神的书单可以关注一下:
Milo的图书豆列主要目的——全面对游戏引擎内核实现进行了解。
第四阶段:到了这个阶段,其实也不太需要再问这个问题了。自己应该有自己很多的判断和职业规划了。游戏性能优化可能是一个不错的方向,可以考虑。
主要目的——强化个人硬实力,锻炼不可或缺的能力。
怎么一个“实践落地”?
任何和技术相关的知识,做完半本书,永远比看完整本书重要得多很多。不做,永远是纸上谈兵,而且遇到实际问题,瞬间崩塌。只有自己做了,看到结果产出了,遇到各种问题,甚至很多都是资料上没有记录的,学习才能真正到位。
而且,只有落地,才能给工作岗位做足够的输出,有这些输出,才能更好地支撑你个人的职业发展。
最后祝你,学有所成,爱上做游戏,做出游戏大作! 不要浮躁地想一个寒假写出什么游戏,请静下心来,学习。学习数学基础,算法,图形学,以及扎实的C++技术。不,游戏不只是商业上的摇钱树,它是艺术,所以你还要不低的艺术修养,不然没有人真正看得起你的游戏本身。
业界最多的,不是技术,不是资金,是浮躁之风。
一个寒假能写出来的,叫Demo,不叫工程。
做自己热爱的,就要静下心。你的人生,从你想做的游戏开始,就不是那样的容易得到美好结果了。请静下心,认真思考,学习。想想:同样会编程,为什么别人能想出游戏怎么写,而我偏偏要看别人的源码?为什么我就没有这点规划创意?也许你的方案比别人的差,可执行率低,但等你想好,用你已有的知识,如何解决这个问题,实现你的愿望,这时再来看别人的解决方案,那么,你收获的就不只是如何制作游戏了。
等积淀了足够多的知识,别忘了,最初的梦想。这时,你已经有足够硬的翅膀。那么,你的游戏之旅,可以起歩了!
不要浮躁,年轻人!静心做事。
好吧,我也只是一个高一的学生,别听我瞎扯了。。。 游戏引擎是什么?
问题问的还是蛮好的,首先要知道游戏引擎是啥。
有C\C++基础的话建议学习使用 Ogre
http://www.ogre3d.org/,跟着官方的Tutorial写点代码,然后自己去写个完成度比较高的Demo。
2D的话就Cocos2dx吧。
零基础的话Unity大法咯,随便拖几下也能出点东西。
怎样开始做一个游戏?
可以参考这个 -
How to Make a Game
需要用到哪些技术?
C/C++ : 这个绝对是做游戏的屠龙宝刀。
OpenGL/DirectX: 图形的API必须学会一个。
图形学:这个觉对视做游戏的葵花宝典。
线性代数:图形学的基础。
推荐书
《Ogre3D Beginner's Guide》
《游戏引擎架构》
《Real Time Renderring 3rd》
《Game Code Complete 4rd》 我刚毕业出来的时候也是做游戏的(ios平台),使用cocos2d框架。
其实那个东东(cocos2d)某程度上也可以说是引擎了,提供方便的图像绘制,音效,输入输出,物理模拟等等。
其实我觉得要开始做一个游戏,首先要明确游戏是“玩什么”,而不是“用什么做”。正如有人能用路边石头画出蒙罗丽莎,有人用金银做的笔直线也画不出来。
我的经验是这样:先要有一个策划案,去确定你游戏的目的,比如马里奥去魔城救公主,那么现在就有两个人物,一个场景和一个任务了!(视觉,精神目标)
然后,怎么才能达成救公主的任务呢?只要马里奥走到公主面前就可以了。(交互操作)
没有障碍的话怎么能叫“救”公主!加个高台,挖个断层,再来个敌人!(挑战性,获取成功感)
敌人不会动?太可怕了。让它来回巡逻。(人工智能)
如果多个敌人巡逻怎么办?马里奥其实是官二代,说打就打!(逻辑)
好了,上面是随便的一个策划案,做出来的话大概就是简化版的马里奥第一关,操作角色向前走,越过障碍,踩扁敌人,最后到了公主面前。
c#也可以完成吧,就是绘图,键盘输入,判断碰撞。
至于2d3d,管他那么多,游戏的影都没看见就自己烦死了,多不值得,不如把注意力放到核心上面。 某小妖口头禅,在文中如果出现TMD、NND、2B、狗屎……之类,请自动屏蔽,仅为口头禅,与人身攻击神马的无关。
游戏引擎是指一些已编写好的可编辑电脑游戏系统或者一些交互式实时图像应用程序的核心组件。这些系统为游戏设计者提供各种编写游戏所需的各种工具,其目的在于让游戏设计者能容易和快速地做出游戏程式而不用由零开始。大部分都支持多种操作平台,如Linux、Mac OS X、微软Windows。游戏引擎包含以下系统:渲染引擎(即“渲染器”,含二维图像引擎和三维图像引擎)、物理引擎、碰撞检测系统、音效、脚本引擎、电脑动画、人工智能、网络引擎以及场景管理。
=========分割线================
以上答案来自百度
对于游戏开发者来说,引擎可以理解为一个封装好的盒子,它的功能是提供调用接口,好让一些复杂的事情通过这个盒子之后变的简单。
举个例子,我们要在计算机上渲染一个3D的场景,而从实际上来说,显示在你的电脑屏幕上的只是一张带有深度感觉的2D图片。(不能理解的翻相册,看看自己的照片,您老不论多么3D的脸庞,印在照片上之后都是一个平面,就在那张纸上。之所以你还是觉得自己看起来是立体的,是因为有了深度感的颜色变化和光影变化。)
对于游戏场景来说是一样的。
首先美术创建了许多3D模型,而这些3D模型分解起来就是许多的三角形包围出来的密封体。然后在这模型基础上,美术绘制了一层叫做贴图的东西,这东西很像人的皮肤,于是……一个模型就诞生了。
接着,我们发现,通过画法几何,3D几何等学术内容的一大堆算数结果……(这点是凑字数的,看不懂没关系,我也不懂)
我们得到一个结论,我们在这个模型的前面摆上一个摄像机,摄像机的视角是扇形范围内的一小块,在这一小块范围内,我们能看到的内容,我们先称之为摄像机视角。不难发现,物体的背面,我们是看不到的(除非你丫转视角),两个物体之间的前后关系,是通过遮挡关系来实现的,除此之外,这个视角下的内容符合我们一切所熟知的光学原理……漫反射、反射、折射、光吸收、投影……想想你的高中物理知识,你不难得到结论:想要描述一个物体,我只需要描绘关于这个物体的全部光信息就可以了。
那么…………我们得到了一套可以通用的算法,我们把这套算法称之为绘制物体时所需要的算法。
转头看来代码层……
如果你每去创建一个物体,都用这种反锁的方式去写一套算法给这玩意儿……你不觉得你很脑残么……于是,就有了这个封装盒子。当然,绘制一个3D图形只是这个封装盒子其中一部分功能。
我们一般把引擎分为:客户端引擎和服务器端引擎。他们分别提供不同的借口,来解决不能的问题。
客户端引擎是我们接触的最多的,它关联的内容包括,骨骼动画、材质、shader、特效、渲染………………等等等。
but!!!
这个非常重要,我因为我见过很多2B跟我在这儿瞎得得!
引擎并不包含功能,或者是引擎并不包含逻辑。比方说,你TM要写一套组队功能,对不起,引擎不管你这事儿。
================================以下是对程序猿同学的建议
程序猿分很多岗位。
对于不同开发需求,会要求程序猿会不同的语言和开发工具。
e.g:
游戏引擎程序猿一般要求是会C++,但是熟知数学、3D数学、至少你要明白四元数是个什么玩意儿,如何做矩阵叉乘。
客户端程序猿是看开发需求,一般要求是C++、C、或者是脚本语言,例如python。
页游程序猿,主要是服务器端程序猿和前端程序猿,前端程序猿的要求一般是as架构。
手游程序猿……以前是JAVA,现在是了解APP平台和APP开发工具,还有些什么玩意儿,不是很清楚。
此外,会有公司要求你熟悉引擎,比如说,熟悉BG、GB,UE,CE。还有一些引擎本身支持跨平台。例如UE,他支持家用机平台开发,手游开发,客户端游戏开发,等等。
但总体来说万变不离其宗,看好C++走遍天下都不怕~
页:
[1]