Saya mencoba memahami alasan di balik desain engine Unity3D dan ini adalah sesuatu yang belum dapat saya pikirkan: mengapa mengubah data yang disimpan dalam komponen terpisah, alih-alih menjadi bagian dari GameObject, seperti nama, layer mask dan tag? Itu tidak dapat dihapus seperti semua komponen lainnya, tidak ada alternatif dan karenanya tidak perlu dihapus.
architecture
unity
component-based
snake5
sumber
sumber
Jawaban:
Hanya pengembang Unity yang dapat memberikan motivasi mereka yang sebenarnya untuk desain ini, tetapi satu argumen yang mendukung melakukannya dengan cara ini adalah bahwa ada argumen bahwa setiap kelas dalam proyek perangkat lunak harus menangani satu dan hanya satu tanggung jawab . GameObject adalah kumpulan bernama Components, dan menambahkan posisi / rotasi / dll untuk itu berarti ia akan memiliki 2 tanggung jawab. Komponen Transform menangani posisi dan rotasi dan oleh karena itu tidak boleh juga bertanggung jawab untuk memberi nama atau menggabungkan komponen lain (yang mungkin tidak terkait). Jadi masuk akal jika 2 konsep ini ada dalam 2 objek terpisah.
Secara lebih umum, pertanyaan ini menanyakan "jika ada hubungan 1 banding 1 antara X dan Y, mengapa Y bukan bagian dari X atau sebaliknya?" Dan jawaban umumnya adalah bahwa perangkat lunak lebih mudah untuk dikembangkan dan dipelihara ketika dipecah menjadi bagian-bagian mandiri yang lebih kecil, bahkan jika 2 bagian selalu bekerja bersama bersamaan.
sumber
Transform adalah komponen wajib di Unity.
Alasan mengapa transformasi adalah komponen wajib adalah bahwa objek permainan terletak dalam sebuah adegan dan karenanya memerlukan informasi spasial (posisi, orientasi dan skala) tentang objek itu. (Informasi ini tidak selalu digunakan, tetapi menjaga komponen transformasi wajib membuat hal-hal sedikit lebih sederhana).
sumber
Ini
TransformComponent
adalah yang paling sulitComponent
untuk dirancang dengan baik dalam arsitektur video game. Hampir setiap orangComponent
perlu mengetahui tentangGameObject
posisi, rotasi, atau skala yang diberikan, jadi memisahkan dengan benar semua sistem yang saling terkait ini pada dasarnya sulit.Akan selalu ada pengorbanan dalam arsitektur. Dengan
TransformComponent
menjadi statis (yaitu tidak dinamis), pengembang di Unity dapat menulis kode dengan asumsi ini. Saya akan menganggap ini membuat segalanya lebih mudah di pihak mereka tanpa menambah banyak ketidaknyamanan di pihak kami. Hal ini mirip dengan paradigma berorientasi objek, di manaGameObject
akanextend
beberapaabstract class
,Transformable
.sumber