游戏对象(Game Object)
游戏的动态元素通常会以面向对象的方式设计。这种方式非常直观。
通常使用游戏对象(GameObject, GO)去描述游戏世界的几乎任何动态元素。
游戏对象有时也成为实体(entity)或者代理人(agent)等。
Cre:Unity引擎部分静态元素也用游戏对象描述。
面向对象思想:
游戏对象本质上是属性以及行为的集合。
同一类型的所有实例共享相同的属性行为,但是每个实例的属性的值可以不相同,如果行为是数据驱动的,那么不同实例的行为也可以有差异。
面向对象还包括继承机制,继承有利于代码复用。
1.游戏对象模型
Jason:在计算机科学中,对象模型(object model)一词有两个相关但不一样的意思。它可以指某编程语言或形式设计语言所提供的特性集,例如C++对象模型。另一个意义是指,某面向对象编程接口,如类和方法的集合,以及为特定问题所设计的相互关系,例如Excel对象模型。游戏对象模型(game object model)含有上述两个方面的定义。
-
游戏的对象模型是一种特定的面向对象编程接口。用于解决一些具体的问题。
-
游戏的对象模型常会扩展编写引擎本身的编程语言。如果引擎是面向过程语言实现的,可以加入面向对象的内容。如果游戏是面向对象语言实现的,通常也可以加入一些高级功能。有些引擎会同时使用编译式语言和脚本语言,并提供统一的对象模型供这两类语言访问。
2.工具方设计和运行时设计
以世界编辑器呈现给设计师的对象模型,不必和用于运行时的对象模型相同:
-
工具方的游戏对象模型,当要实现为运行时的模型时,可以使用使用非面向对象语言例如C语言。
-
工具方的单个游戏对象,在运行时可能被实现为一组而非一个类。
-
每个工具方的游戏对象,在运行时可能仅是一个标识符,其全部状态则存储至多个表或者一组松耦合的对象。
因此引擎一般有两个不同但相关的对象模型:
- 工具方对象模型(tool-side obbject model)是一组设计师在世界编辑器看到的游戏对象类型。
- 运行时对象模型(runtime object model)是把工具方对象模型实现于运行时的对项目信息。可能和工具方对象模型相同或有直接映射,也可能实现完全不同。
Jason:有些引擎中,工具方和运行时会共享游戏对象模型实现。其他一些引擎中,运行时和工具方对象模型实现则不一样。
(END)