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. MotionHareket 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 Collisionve Motionbirbirine bağımlı görünüyor .
Bir Motionöğeyi taşıdığında, dönüşümün onaylanması Collisionve 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. MotionSistem 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 Motionolan tüm varlıklara uygulanmayan sisteme ittiği görülmektedir Movable.
Ben de bir hareket vektörü depolayabilir Movableözniteliği ve sahip Collidersistem ayarlamak Transformgerektiği gibi, ama bu işlevleri arasında çoğaltma dahil edeceğiz Motionve Colliderya bir geri arama Collideriçin Motionsıç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?