游戏框架和游戏引擎有什么区别?


Answers:


21

对于“引擎”或“框架”,确实没有严格的定义。

一般而言,与框架相比,引擎被认为具有“更多的功能”或具有更多的工具和相关支持,框架本身通常只是一些通过统一API公开的相关功能的松散集合。

为此,声称是引擎的事物可能会使用声称是框架的事物来实现功能,但这并非总是如此。同样,声称是游戏引擎的事物可以声称其组成部分(物理和渲染等)是通过物理引擎或物理框架实现的。这两个术语所指的技术种类可以互换使用,也可以不互换使用。

几乎所有东西都可以有“引擎”或“框架”-物理,声音甚至是2D或3D图形。

这实际上只是一个术语问题,通常并不重要。从功能的角度(专注于制作游戏的角度),重要的是所讨论的技术是否满足了您制作游戏的需求。无论它自称是引擎还是框架都不会对此产生任何影响。


11

我使用的简单定义是:您可以在框架上构建引擎,但绝不会在引擎上构建框架。一个是决定架构和程序流程的框架,另一个是完成工作的肌肉。

举一个具体的例子,A​​rtemis是一个用于构建组件系统的精巧小框架,但您永远不会称其为引擎。您可以构建Artemis Systems和标准组件以从中创建引擎。


1
在我公司里,有人设计了一个引擎框架。该框架充当了引擎未提供的缺少部分的集合,统一了原本在我们(旧)引擎中有些杂乱的东西。并提供帮助开发人员的便利。
v.oddou 2015年

2

框架是(通常)较低级的库和帮助程序的集合,您可以使用它们来做任何您想做的事情(图形,声音等)。框架与游戏没有任何关系,除非框架通常经过优化或设计为可以做游戏中常见的事情。

示例:引擎允许您拥有一个实体列表,每个实体在地图上都有一个位置。框架允许您在特定位置渲染3d对象。

因此,您可以通过为每个实体提供3d对象来连接它们,并在需要时进行渲染。

ta-da,你有游戏。


2

有关真正详细的解释,我建议阅读Jason Gregory 撰写的唯一的《Game Engine Architecture》。我想这是自该主题发表以来最完整的著作。它不仅处理C ++部分,而且对于每个游戏引擎程序员来说,背后的理论/体系结构也很重要。这是独立于语言的良好起点。为了获得概述,我们正在谈论的是本书中的这张图片

让我尝试回答这个问题。

无论您写什么,都将是代码:-)经过多年的经验,写下所需的内容以及所需的方式,或者使用可以为您提供所需内容的内容。

术语引擎框架来自软件体系结构以及其他术语。因此,让我们从基本术语开始,让我们向上移动。


图书馆

典型示例:数学库,提供用于数学计算(向量,矩阵等)的所有基本类型和函数;图像库(jpeg或png),提供编写jpeg或png图像的功能

在Unity 3D Math中,数学是一本数学书。

理论:图书馆提供围绕主题(例如数学)的专用功能,并且 并由程序员按需调用

预览一下:可能有一些保存框架的库,也就是框架库。


构架

理论:框架引入了 控制反转。这意味着开发人员大部分时间不调用框架方法,而是框架调用开发人员的代码。例外情况是,您必须将框架库集成到代码中并必须启动框架。框架库提供了专门用途的框架的所有方法,功能和接口。因此,框架可以在库中。

典型示例:Unity 3D MonoBehaviour提供诸如Awake,Start,OnUpdate之类的方法。开发人员实现这些方法,然后(游戏对象管理)框架调用这些方法(这是控件的倒置)。与方法OnCollisionEnter,OnCollisionExit相同。它们在同一个Monobehaviour中,但是我敢打赌,它们是由物理框架调用的。


预览:引擎,运行时,编辑器,SDK

由于引擎一词总是含糊不清,而且仍然很模糊(随着技术的不断发展,它不会变得更好),因此需要进行一些预览。

引擎一词用于多种事物,不能唯一地说出哪一种是正确的。早在2004年,当我第一次接触编写游戏引擎的时候,那也是模糊的。您拥有一个游戏引擎,其含义是某种代码可以加载预定义的数据,并让您玩游戏。由于它加载预定义的数据,因此它们被称为数据驱动引擎。您只编译了一次,而外部数据可能是不同的游戏,而无需重新编译。在某些时候,这与运行时一样。

编辑器很清楚。它使您可以定义引擎/运行时加载的预定义数据。

具有编辑器的引擎称为SDK(例如Hammer SDK)。

然后是专用的发动机。phyiscs引擎,渲染引擎,声音引擎,gameobject管理引擎,网络引擎...

我个人认为这些不是引擎(尤其是渲染引擎不是游戏引擎,因为它只渲染)。当我用google游戏引擎搜索时,结果包含90%的纯渲染引擎,而不是游戏引擎。我将它们全部称为库,但是由于它们可以加载预定义的数据,因此它们将与术语“数据驱动引擎”相匹配。

在我们详细介绍之前的最后简短说明:我成功地获得了计算机科学的硕士学位。我的硕士论文处理的主题是“如何开发游戏引擎的核心”。意思是将所有其他引擎连接在一起的代码部分,进行游戏对象管理,游戏循环等。

我以(短)书的形式发表了我的硕士论文。买家/读者对亚马逊的唯一评论是(几年后):这与游戏引擎无关。自从我成功毕业后,我就抵制了3位经验丰富的程序员(其中2位专门用于游戏和交互式应用程序)为我的论文辩护,我想我已经写了一个游戏引擎。


编辑

简便:让您以其他部分所需的格式定义数据,因此无需手动编写这些文件或使用外部工具来创建它们。

这就是Unity 3D编辑器的工作。


运行

该术语通常与引擎同等使用(可以正确或不正确)。

运行时将执行生成的数据并执行与数据相关的操作。例如,向您展示游戏,然后让您玩游戏。它不会创建任何数据(也许保存游戏除外),也就是说您无法随便修改游戏本身。

Unity Web Player是/曾经是一个运行时,可让您在网络浏览器中玩Unity游戏。

您可以在同一运行时加载和执行多个不同的游戏。

对于Unity 3D脚本API,在游戏中可以使用的功能和仅在编辑器中可以使用的功能之间有所区别。


开发包

这个术语通常也称为框架

那时,SDK是一整套工具,例如编辑器,用于程序员的IDE(集成开发人员环境),用于数据格式的导出器和运行时/引擎。

因此,SDK /框架为您提供了预定义的工作流程和实用程序,并向您展示了(设计良好)如何(轻松)创建游戏的方式。

基本上,Unity 3D引擎会出错,因为它更适合SDK方向。但是由于Unity甚至更多,因此需要一个新的单词/定义来匹配它。

无论如何,要引入另一个术语,SDK /框架会为您提供预定义的游戏开发管道(不仅是资产管道,而且可能像Unity一样是资产,逻辑,构建,部署等管道)。


发动机

嘲讽适用于所有事物,因为每个人都希望通过编写库,框架或游戏而不是编写完整的引擎来变得更酷。嘲讽

让我们触发它:

引擎

  1. 是一段代码/软件
  2. 它旨在在多个项目中重用(您也可以只为一个游戏编写一个游戏引擎)
  3. 为了被重用,游戏引擎将可重用部分与游戏特定部分分开
  4. 为了可重用(取决于打算如何重用),有不同的风格,例如数据驱动引擎加载外部数据

一个引擎可以包含多个其他引擎(因为如今所有事物都被称为引擎)。游戏引擎可以包括

  • 做渲染的渲染引擎(再次:天哪,该死,地狱:仅做渲染的代码不是游戏引擎)
  • 做物理的物理引擎(它是物理引擎,而不是游戏引擎)
  • 处理AI内容的AI引擎(这是AI引擎,而不是游戏引擎)
  • 一个网络引擎(例如RakNet)来做网络工作(这是一个网络引擎,而不是游戏引擎)
  • 做音频工作的音频引擎(它是音频引擎而不是游戏引擎)

基于核心引擎的应用程序示例提供了一个基于插件的框架,该框架用于将所有组件都封装在基于组件的游戏对象管理模型中。每个子引擎(渲染音频)都是作为插件添加到游戏引擎的模块。每个组件都可以是子引擎/模块的一部分。(基于组件的)游戏对象管理是各个模块之间的连接链接。

在此处输入图片说明


最接近游戏引擎的定义

一个游戏引擎是部分源代码,你的游戏是提供的所有功能,其目的是重复使用翻过多种游戏,让你的代码并执行你的游戏。因此,它将所有其他代码部分(渲染,音频,物理,游戏对象管理,网络)连接在一起,它们可能是库,框架或专用引擎(渲染,物理等)。

游戏引擎是一团糟。



0

正如@Josh所述,对框架或引擎没有严格的定义,但从概念上讲,两者都是非常不同的工具。

框架包含可使用的基本API抽象,为用户提供了更高级别的工具来与平台或功能进行交互,而无需(通常)担心性能,兼容性等。在您提供的示例中,SDL是一个框架,它提供了您无需使用平台,就可以在该层后面构建软件,而不必担心窗口管理,特定于OS的内容等。如果要构建整个软件,则需要使用不同的框架,例如SDL以管理媒体和平台内容,用于管理物理的Box2D等。

引擎是不同的,在这种情况下,该工具提供了开发所需的一切,物理引擎将为您提供管理物理所需的一切,并会提供易于使用的API,因此,如果要构建物理仿真,则可以不需要任何其他第三方库。引擎不过是框架,其他引擎,接口,代码片段和通用代码的集合,它们提供了完成项目所需的一切,而无需其他第三方也无需担心底层的东西。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.