Dalam merancang sistem entitas-komponen untuk mesin saya, saya telah menemukan sedikit hambatan dalam cara menyimpan dan mengambil jenis komponen tertentu.
Pertama, izinkan saya mengatur sedikit terminologi yang akan saya gunakan dalam pertanyaan ini:
- Saya menyebut " Komponen " struktur data yang menyimpan data yang relevan untuk sistem tertentu.
- Saya menyebut " Sistem " agregasi metode dan struktur data yang memanfaatkan Komponen untuk memperbarui status permainan / antarmuka dengan pengguna.
- " Entity " pada dasarnya hanya ID yang digunakan untuk mengambil komponen tertentu dan memodifikasi data mereka dalam logika game.
Setiap sistem memiliki larik (ID-dipetakan) dari jenis Komponennya (Misalnya Fisika-> Komponen Fisika, AI-> Komponen A, komponen- Render-> RenderingKomponen), sehingga dapat beralih secara efisien melalui data.
Namun, tidak semua komponen dimiliki secara khusus oleh suatu sistem. Misalnya, komponen Transform menyimpan posisi, rotasi, dan skala objek. Ini adalah salah satu bagian terpenting dari sebuah entitas (Unity membuatnya wajib, bahkan), karena digunakan oleh banyak sistem, misalnya Fisika, AI, Rendering dll.
Ini cukup banyak masalah yang saya hadapi. Karena Transform digunakan oleh banyak sistem lain, bagaimana cara saya mengambil satu untuk digunakan untuk setiap Komponen? Salah satu solusi yang mungkin saya lihat adalah membuat setiap Komponen menyimpan ID Entitasnya sendiri. Akan mudah untuk mengambil komponen seperti ini, tetapi tidak akan seefisien itu, dan itu juga akan bertentangan dengan konsep Komponen sebagai kumpulan data yang terisolasi dan independen, yang tidak mengetahui komponen lainnya.
Apakah ada cara yang tepat untuk menyelesaikan masalah ini? Haruskah Transform bahkan menjadi komponen?