我一直在考虑尝试使用组件化架构进行游戏开发。我已经阅读了一些关于此的博客文章和文章,但还有一些问题我还没有解决。当我说组件化时,我的意思是您可以向ComponentManager添加组件,它会更新其列表中的所有组件。我想尝试这样做是为了避免获取继承不需要的变量和函数的类。我非常喜欢拥有一个非常简单的实体类,其中有许多组件并排工作而不会变得臃肿的想法。此外,可以在运行时轻松删除和添加功能,这使它真正酷炫。
这就是我所追求的。
这就是我所追求的。
// this is what the setup could be like
entity.componentManager.add(new RigidBody(3.0, 12.0));
entity.componentManager.add(new CrazyMagneticForce(3.0));
entity.componentManager.add(new DrunkAffection(42.0, 3.0));
// the game loop updates the component manager which updates all components
entity.componentManager.update(deltaTime);
通信:一些组件需要与其他组件通信
我不能依赖组件自给自足。有时它们需要与其他组件通信。如何解决这个问题?在Unity 3D中,您可以使用GetComponent()
访问组件。
我曾考虑过这样做,但如果您有两个相同类型的组件会发生什么?也许你会得到一个向量返回。
var someComponent : RigidBody = _componentManager.getComponent(RigidBody);
优先级: 有些组件需要在其他组件之前更新
为了获取当前游戏循环的正确数据,有些组件需要在其他组件之前更新。我正在考虑为每个组件添加一个优先级,但我不确定这是否足够。Unity使用LateUpdate和Update,但也许有一种方法可以更好地控制执行顺序。
就是这样。如果您有任何想法,请随时留下评论。或者,如果您有任何关于此问题的好文章或博客,我将非常乐意查看它们。谢谢。
http://cowboyprogramming.com/2007/01/05/evolve-your-heirachy/
编辑: 我的问题实际上是如何解决优先级和组件间通信的问题。