本文目录
一、游戏引擎是什么_
游戏引擎是指一些已编写好的可编辑电脑游戏系统或者一些交互式实时图像应用程序的核心组件。
游戏引擎提供一系列可视化开发工具和可重用组件。这些工具通过与开发环境进行集成,方便开发者简单、快速进行数据驱动方式的游戏开发。为了提高游戏开发人员的开发效率,引擎开发者会开发出大量的游戏所需要的软件组件。
大多数引擎集成了图形、声音、物理和人工智能等功能部件。游戏引擎会被称为“中间件”,因为它们可以提供灵活和重用平台,向游戏开发者提供所需要的全部核心功能,从而节省大量的游戏开发费用,降低开发的复杂性,缩短游戏的上市时间,所有这些对于高竞争性的游戏产业来说都是关键因素。
诸如虚幻系列引擎、Unity3D、Frostbite Engine、zerodin引擎、Doom3引擎、CryENGINE、3DGame
Studio、RenderWare、Gamebryo、Virtools以及Source引擎等引擎。
与其它中间件解决方案一样,游戏引擎通常提供平台抽象层,实现同一款游戏可以在各种平台上运行,包括游戏机和个人电脑,而只需要改动少量的源代码。
游戏引擎均设计成基于组件的架构,方便进行特定子系统的替换或者添加新的引擎中间件(通常成本较高)从而实现功能的扩展。比如Havok物理引擎、Miles
Sound System声音引擎和Bink图形引擎等。一些游戏引擎如RenderWare引擎由一些松耦合的游戏中间件组成,可以根据需要定制出游戏引擎。
通过组件技术,可以实现游戏引擎的扩展性,而扩展性通常是游戏引擎优先考虑的特性。游戏引擎经常会应用于交互应用的实时图像显示,比如营销演示、建筑可视化、训练模拟、环境建模。
扩展资料:
1、硬件概念
3D引擎的渲染系统通常建立在一套高级图像API之上,诸如Direct3D或OpenGL,这些API封装了GPU和显卡的部分功能。级别低一点的如DirectX、SDL和OpenAL也经常使用,他们提供对其他硬件设备的独立支持,诸如输入设备(鼠标、键盘、控制杆)、网卡、声卡。在硬件加速图形卡出现以前,开发者使用软件渲染。现在软件渲染依然被广泛用于非及时图像的渲染,或者是用户的硬件设备不支持硬件渲染。
2、中间层
一些引擎开发者以开发整个游戏引擎而著称,他们试图开发一个具有所有游戏元素的引擎,包括图像、声音、物理、人工智能。比如Gamebryo和RenderWare就是这样的引擎。
也有一些开发者只专注于开发引擎的某一部分,但他们取得的成就往往比全功能引擎还高。SpeedTree就是一个很好的例子,他适用于大规模植被的渲染,被使用在Playstation
3、Xbox 360,微软开发的一些RPG,以及上古卷轴4:遗忘。
一些引擎提供完整的源代码,其他的只提供一个经过封装的API接口,使用者用过调用DLL文件来使用这个引擎。还有一些引擎将引擎二进制包和源代码划分开来,前者被免费授权使用,而后者则需要高额的费用来购买使用授权。
参考资料来源:百度百科-游戏引擎
二、游戏引擎怎么开发
嗯嗯,游戏引擎发展到今天,已经是一个产业化需求比较泛化的软件体系。如果细分,按不同的细分维度会有很多不同的划分,比如按功能分可以分为物理引擎,渲染引擎,脚本引擎等,按平台分可以分为PC游戏引擎,HTML5游戏引擎,移动端游戏引擎等,按渲染类别分2D引擎,3D引擎等。
再比如对于网游,又分客户端引擎和服务器引擎;服务器引擎的架构游戏类型、负载需求息息相关,架构本身和技术基础组件选型(操作系统、开发语言、网络库、数据库、运维工具、运营后台等)相关联,比较灵活。
按问题要求,猜测楼主问的是通用跨平台客户端引擎,参考对象是Unity,Unreal,CocosCreator等。先提取游戏引擎典型的核心功能如下:
渲染:实现画面的展示
物理:实现物理世界的抽象和表现
音频:实现声音的播放处理
网络:实现联网功能
游戏编程接口:讲游戏引擎能够提供的接口以API形式暴露给开发者
配套的集成开发环境(IDE):实现可视化场景编辑、组织,可视化物理编辑,可视化UI布局,资源的使用等
调试功能:提供便捷的方式以便开发者对游戏功能进行测试和debug,优化性能。
打包发布功能:生成最终的游戏的exe,app,apk等等可执行(可运行)文件
插件扩展功能:提供给高级开发者的对引擎自身功能增强的功能接口
其它功能:如Unity有service,可以集成平台数据统计、自身的视频广告等功能。
然后逐一略叙实现方式,强调一下,最好参照业内的经过广泛验证的引擎去了解,例如Unity;如果想知道更多细节,可以先使用一下主流引擎。
1.渲染:为了跨平台,一般会选用跨平台的图形标准库底层如OpenGL,基于底层库再构建上层渲染框架,如精灵(Sprite),GUI,3D模型的渲染,shader扩展等。
2.物理:物理引擎对运算性能要求比较高,而且底层功能的测试需要耗费大量精力,所以通常采用成熟的物理引擎,例如Havok,PhysX,Bullet,cannon.js等。
3.音频:通常会采用业内成熟方案,如开源的OpenAL、FMOD、HTML5平台自身的Audio功能等。一般来说,非音乐类游戏对音频功能的需求相对不会太复杂,主要是靠专业软件提供音效文件(mp3,wma等),游戏中解析因小文件,处理声音播放,音量大小调整等。
4.网络:提供联网的功能,按需提供TCP,UDP,HTTP等协议的包装好的易用的接口。如果为了方便开发,可以处理好客户端和服务器通信的连接处理,错误提示,协议的帧格式,序列化、反序列化方式,可以在此之上提供进一步的规范,例如采用Protobuf作为协议格式。
5.游戏编程接口:这就是提供给开发者的API的组织。确定引擎提供给开发者用什么语言编程,怎么使用图片、音视频资源、3D模型等,怎么提供接口和游戏运行时环境(电脑、手机)交互等。
6.配套的集成开发环境(IDE):易用的可视化开发工具,如拖拽布局、拖拽游戏资源的使用、代码编辑、集成调试打包功能等。这一块是游戏引擎开发工作量的大头,涉及用户(游戏开发者)密集使用的交互接口,要尽可能满足高效、易用。一般来说如果不是特别有能力驾驭,最好现成的采用跨平台的应用程序开发方案,比如CocosCreator采用electron框架。
7.调试功能:提供查看FPS,跟踪代码运行,Profile,网络信号模拟,分辨率模拟设置,硬件设备模拟(手机)预览游戏等。建议游戏运行时与编辑器使用同一套或者大致一样的渲染和资源接口(例如Unity),这样方便降低调试和运行结果大相径庭的情况。
8.打包发布功能:简单处理可以生成要打包的对应平台的工程,比如android平台生成AndroidStudio工程,ios平台生成xcode工程,注意资源、代码库的引用关系,配置文件的有效性、一致性,编译速度等。
9.插件扩展功能:人力因时而穷,引擎功能不必强求一开始就大而全,可以将引擎整体设计为一个易扩展、易修改的结构,提供相应接口暴露给开发者,群策群力迭代和改进游戏引擎。
10.其它功能:这一块可以根据自身引擎特点来进行添加,比如现在主流的几大引擎都有提供官方继承的资源商店、数据统计等服务接口。
真正可用的引擎的实现是一个系统而复杂的工程,有很多脏活累活需要考虑在里头,平台兼容性、性能、效果、易用性、鲁棒性、文档编写需要耗费巨量的心力;
如果是个人兴趣了解,可以根据上述内容再延伸查询相关内容,也欢迎随时交流。
如果是想做个娱乐引擎可以随意玩,技术如诗,越撸越痴;
如果是想创造一个伟大的引擎,请收下我的膝盖。
现在的游戏使用的硬件接口基本有两种,一个是DirectX,另一个是OpenGL,OpenGL只是2D3D图形图像接口,没有其它功能,DirectX则是一个全套的多媒体接口,包括2D3D图像、视频、音频、网络、输入设备等等,专为游戏制作开发。两个发展都很迅速,不断添加新的功能,并由硬件实现。游戏引擎的任务就是封装这些底层硬件加速接口的细节,并给游戏设计人员提供完善的实现游戏所需功能的接口。想要写一个引擎,首先得知道引擎是什么样,可以参考发布的引擎,有简单的非商业的,也有功能强大复杂的商业的。推荐你看看出名的2D引擎HGE,速度非常快,简单易用,引擎中包含源代码。
三、如何自学游戏引擎的开发
手机游戏一般需要学习JAVA、C#。而大型的端游则需要学习C++,或者针对开发引擎学习。而合格的程序应该更多针对图形化处理有所了解。
游戏引擎是指一些已编写好的可编辑电脑游戏系统或者一些交互式实时图像应用程序的核心组件。这些系统为游戏设计者提供各种编写游戏所需的各种工具,其目的在于让游戏设计者能容易和快速地做出游戏程式而不用由零开始。大部分都支持多种操作平台,如Linux、Mac OS X、微软Windows。
原理:
游戏引擎是一个为运行某一类游戏的机器设计的能够被机器识别的代码(指令)集合。它像一个发动机,控制着游戏的运行。
一个游戏作品可以分为游戏引擎和游戏资源两大部分。游戏资源包括图象,声音,动画等部分,列一个公式就是:游戏=引擎(程序代码)+资源(图象,声音,动画等)。游戏引擎则是按游戏设计的要求顺序地调用这些资源。