Bir süredir bileşen tabanlı varlık sistemine ilgi duydum ve sayısız makaleyi okudum ( Insomiac oyunları , oldukça standart olan Hiyerarşinizi Geliştirin , T-Machine , Chronoclast ... sadece birkaç isim).
Hepsinin dışarısında bir şey varmış gibi görünüyor:
Entity e = Entity.Create();
e.AddComponent(RenderComponent, ...);
//do lots of stuff
e.GetComponent<PositionComponent>(...).SetPos(4, 5, 6);
Ve paylaşılan veri fikrini getirirseniz (bu, şimdiye kadar gördüğüm en iyi tasarımdır, her yerde verileri kopyalamamak açısından)
e.GetProperty<string>("Name").Value = "blah";
Evet, bu çok verimli. Ancak, tam olarak okumak veya yazmak kolay değildir; sana karşı çok tuhaf ve sana karşı çalışan bir duygu.
Şahsen şöyle bir şey yapmak istiyorum:
e.SetPosition(4, 5, 6);
e.Name = "Blah";
Tabii ki, bu tür bir tasarıma ulaşmanın tek yolu, Varlık-> NPC-> Düşman-> FlyingEnemy-> FlyingEnemyWithAHatTarihine göre bu tasarımdan kaçınmaya çalışır.
Bu tür bir bileşen sistemi için hala esnek olan, ancak bir kullanıcı dostu olma düzeyi koruyan bir tasarım görmüş olan var mı? Ve bu konuda, veri depolama alanını (muhtemelen en zor olanı) iyi bir şekilde aşmayı başarır mı?
Kullanıcı dostu fakat yine de esnek olan bileşen tabanlı bir varlık sistemi için hangi tasarımlar var?