私はしばらくの間、コンポーネントベースのエンティティシステムに興味があり、その上で数え切れないほどの記事を読んでいます(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のような階層に戻ることですが、この設計は回避しようとします。
この種のコンポーネントシステムの設計を見たことがありますが、これはまだ柔軟性がありますが、ユーザーフレンドリーなレベルを維持していますか?それに、データストレージ(おそらく最も難しい問題)を良い方法で回避できますか?
ユーザーフレンドリーでありながら柔軟なコンポーネントベースのエンティティシステムにはどのような設計がありますか?