Kami hanya beralih dari mesin permainan berbasis hierarki ke mesin permainan berbasis komponen. Masalah saya adalah bahwa ketika saya memuat model yang memiliki hierarki jerat, dan cara saya memahami, adalah bahwa suatu entitas dalam sistem berbasis komponen tidak dapat memiliki beberapa komponen dari jenis yang sama, tetapi saya memerlukan "meshComponent" untuk setiap jala dalam model. Jadi bagaimana saya bisa menyelesaikan masalah ini.
Di situs ini mereka menerapkan mesin permainan berbasis Komponen: http://cowboyprogramming.com/2007/01/05/evolve-your-heirachy/
architecture
component-based
Mathias Hölzl
sumber
sumber
SkeletalMeshActor
hanya punya satuSkeletalMeshComponent
. Ini adalah masalah umum yang dapat diatasi dengan berbagai cara.Jawaban:
Komponen Posisi Anda dapat memiliki logika "orang tua / anak-anak", di mana setiap Entitas dengan Posisi dapat memiliki orang tua dan posisinya relatif terhadap orang tua mereka. Alih-alih memiliki beberapa mesh pada entitas yang sama, Anda dapat membuat lebih dari satu entitas, masing-masing dengan mesh sendiri dan menghubungkannya bersama. Anda bahkan dapat membuat entitas anak-anak mendengarkan acara orang tua mereka (atau sistem apa pun yang Anda miliki untuk komunikasi antar entitas) dan bereaksi sesuai dengannya.
sumber
ModelComponent
yang berisi hierarki jerat? Memisahkan entitas hanya untuk itu terdengar seperti solusi yang salah untuk masalah tersebut. Lihat jawaban Asakeron dan Byte56.Komponen meshCon Anda mungkin berisi daftar jerat. Saya tidak yakin bagaimana Anda menerapkan mesin Anda, tetapi suatu sistem dapat dengan mudah beralih ke semua jerat dan hanya menggambar mereka.
sumber
Saya akan membuat komponen mesh saya dengan daftar objek mesh. Setiap objek mesh memiliki data mesh bersama dengan offset. Saat menggambar, sistem gambar mengambil posisi dari komponen posisi, lalu menggambar setiap jala di komponen jala pada posisi + offset.
Anda dapat memiliki beberapa jerat di dalam komponen mesh Anda, sambil tetap mengatakan dengan komponen mesh tunggal per entitas.
sumber
TLDR: Dengan membuat komponen terdiri dari beberapa jerat untuk memulai.
Saya setuju dengan Asakeron / Byte56 / Laurent bahwa diperlukan tingkat tipuan antara pasangan mesh / material, dan entitas itu sendiri. Alih-alih melihat GraphicsComponent sebagai simpul dan material, anggap itu sebagai gumpalan piksel pada raster terakhir - bagaimana mendapatkannya / mereka mendapatkan detail implementasi dan tidak lebih.
Saya banyak memikirkan hal ini untuk proyek saya dan saya pikir solusi optimalnya adalah membuat GraphicsComponent komponen yang jauh lebih tinggi, mencakup banyak fungsi dari objek 'Model' tradisional - karena fungsi ini bukan opsional! Untuk membuat poligon itu lebih dari sekadar data buffer dan shader diperlukan, seperti:
Dan itu hanya untuk aset 3D, tanpa mempertimbangkan sistem partikel, papan iklan, dll. Tetapi semua itu hanya berkaitan dengan grafik / kode rendering - itu tidak memengaruhi fisika, suara, atau penulisan skrip, sehingga masuk akal bahwa ia harus diduduki. komponen Grafik / Rendering.
Saya berakhir dengan:
Di dalam:
Model adalah setiap aset game yang memiliki komponen grafis.
ModelComponent analog dengan Model tradisional dan pada kenyataannya, untuk aset 3D. Pengontrol GraphicsComponent (jika Anda menggunakan pola Model-View-Controller) bertanggung jawab untuk mencari tahu apa jenis aset grafis itu dan menggambar dengan benar (perhatikan bahwa ModelComponent adalah subkelas dari GraphicsComponent).
Ada juga beberapa kompromi di tambang untuk kesederhanaan dan kompatibilitas keterbelakangan, seperti setiap GraphicsComponent juga merupakan Entity, dan Entity menyimpan data Posisi secara langsung sehingga hanya dihitung di satu tempat, tetapi idenya sama: GraphicsComponent menangani apa yang ada diperlukan untuk menggambar item - semua yang dibutuhkan - bukan hanya apa yang berasal dari pemodel.
sumber