游戏引擎之间的重要差异,莫过于其游戏性组件设计与实现的差别。然而,不同引擎之间也有出奇多的共同模式。
【一】单一庞大的类层次结构,如虚幻引擎
这种风格使用OOP中的继承多于组合,这显然不符合现代OOP所倡导的多用组合原则。
也会引发很多问题,如多重继承的致命钻石,冒泡效应(虚幻引擎中的Actor类)
但是max-in类可以稍微缓解上面的问题
【二】基于组件的模型
类似unity的架构模型,游戏对象类GameObject只是一个容器,本身不具备任何行为和属性(Transform除外)
游戏对象的各种行为和属性被分解到各种组件上。想要什么功能直接往GameObject上挂一个组件即可
这种组合多于继承的风格现在很受欢迎啊,即使在游戏领域之外也是如此。
【三】纯组件模型
把组件模型发挥极致,连GameObject都不要了,但是组件本身要维护一个标识符,用来标记它现在是属于哪一个游戏对象的。
但是组件和组件以及游戏对象之间的通信变得比较麻烦了。
参考:《游戏引擎架构》