ES ile daha eğlenceli ...
Şu anda birkaç sistemim var:
- Renderer (Yenilenebilir özellik, Transform özelliği)
- Hareket (Taşınabilir özellik, Dönüştür özelliği, Yenilenebilir özellik [sınırlayıcı kutular için, vb.])
- Giriş (InputReceiver özniteliği)
- vb.
Çarpışma tespiti ekliyorum. İlk düşüncem çarpışma yapan yeni bir sistem eklemekti. Motion
Hareket eden veya canlandırılan her şey çarpışma algılamaya (kameralar, sis vb.) Mutlaka katılmadığı için bunu sistemden izole tutmak bana mantıklı geliyor , ancak öyle görünüyor Collision
ve Motion
birbirine bağımlı görünüyor .
Bir Motion
öğeyi taşıdığında, dönüşümün onaylanması Collision
ve hareketin iptal edilmesi veya ayarlanması gerekir (sıçrayan, duvarda durma vb.).
Alternatif olarak, birbiriyle çarpışabilecek varlıklar arasında paylaşılan bir çarpışma nesnesine (kd-tree, octree vb.) Bir referans sağlayan Collidable niteliği oluşturmak olabilir. Motion
Sistem daha sonra bu özellik için kontrol edin ve kontrol etmek veya hareketini ayarlamak için kullanmak.
Kod açısından bakıldığında, bu kabul edilebilir bir çözümdür. Ancak, bir ECS mimarisi bakış açısından, mantığı, özniteliği Motion
olan tüm varlıklara uygulanmayan sisteme ittiği görülmektedir Movable
.
Ben de bir hareket vektörü depolayabilir Movable
özniteliği ve sahip Collider
sistem ayarlamak Transform
gerektiği gibi, ama bu işlevleri arasında çoğaltma dahil edeceğiz Motion
ve Collider
ya bir geri arama Collider
için Motion
sıçrama / yansıma, vb çarpışma konumu ve yüzey veriler hakkında bazı verilerle .
Bu "özel durum kesmek" başlığı altında olabilir ama bir ton kenar vaka kodu oluşturmadan önce bu ele almış olanlar bazı girdi almak istiyorum.
Soru Hareket ve çarpışma sistemleri arasında birbirlerinin bilgisine ihtiyaç duydukları zaman sıkı bağlantıdan kaçınmanın iyi bir yolu nedir?