"entity" 和 "game object" 之间有什么区别?

What's the distinction between an "entity" and a "game object"?

我正在这里开发 3D 引擎 API(渲染引擎,而不是游戏引擎)并尝试正确命名 class。

在我的系统中,我有一大堆组件,例如 "camera"、"transform"、"lights"、"material" 等,包括我拥有的另一种组件类型称为 "object".

每个 "object" 对每个其他组件类型都有一个 link,即。 link 到 "camera",link 到 "material",依此类推。

相当标准的东西。

我的问题是 - 应该叫 "object" 或 "entity" 还是其他名称?

谁能给我指出关于这些概念的规范文献?对于很多人来说似乎是个人品味的问题,但为了最大程度地理解文档,我想明确这一微妙之处。

我见过几个 webgl javascript 引擎。每个术语都不同。

Distinction between an “entity” and a “game object”?

通常object是可以用视觉and/or触觉感知的东西。虽然实体可能只能通过第六感感知或根本无法感知(场景中的两个摄像头无法相互感知)。每个 object 都是实体,但不是每个实体都用 object 表示。

在编程中, 相机、灯光、模型、场景,它们都需要位置、旋转和缩放。还有很多东西是依赖的,所以这里有另一个重要的词:节点。

在 OOP 层次结构中,节点是第一个。它只有一个 parent,除了第一个节点有 none,还有零个或多个 children。 实体扩展节点。它有位置、旋转、缩放 + parent、children。每个转换都会影响所有 children。 Object 扩展实体。 Object 可能有额外的各种属性,如一组网格,(每个 Object 由一个或多个网格组成,每个网格有 material)。

提示:

有时在 OOP 层次结构中有 3 个不同的 object 是没有用的。大多数引擎将它们合并为单个 object 或两个,不同的组件可能会排除构造函数中的属性。例如全局光不需要位置、旋转或缩放。定向光不需要位置和比例,但需要旋转。但是仅仅因为两个组件而扩展整个 OOP 层次结构是不值得的。

在playcanvas中它的名字是Entity。在 threejs 中它的名字是 Object3D。名称也可能是 GraphNode 或 Node,因为它在 cocos2d(这是 2d 引擎)中。

我没有任何文献资料,但我同意 Thomas 的观点:尽量避免使用 Object、Node 之类的词,因为它令人困惑。我认为将其合并在一起的最佳名称是 Entity,但它与或多或少或对词本身的描述无关。最重要的是,你和其他人觉得什么令人困惑。