我对基于组件的实体系统感兴趣已有一段时间了,并阅读了无数文章(Insomiac游戏,相当标准的Evolve Your Hierarchy,T-Machine,Chronoclast ...等)。
它们似乎都在某种东西的外部具有结构:
Entity e = Entity.Create();
e.AddComponent(RenderComponent, ...);
//do lots of stuff
e.GetComponent<PositionComponent>(...).SetPos(4, 5, 6);
而且,如果您引入了共享数据的概念(这是到目前为止我所见过的最好的设计,因为这并不是在所有地方都复制数据)
e.GetProperty<string>("Name").Value = "blah";
是的,这非常有效。但是,它并不是最简单的读写方法。感觉很笨拙,而且对您不利。
我个人想做这样的事情:
e.SetPosition(4, 5, 6);
e.Name = "Blah";
当然,获得这种设计的唯一方法是回到Entity-> NPC-> Enemy-> FlyingEnemy-> FlyingEnemyWithAHatOn这种设计试图避免的层次结构。
有没有人看到这种组件系统的设计既灵活又保持了用户友好性?就此而言,设法以一种很好的方式解决(可能是最困难的问题)数据存储?
用户友好但仍然灵活的基于组件的实体系统有哪些设计?