Saya membuat game menggunakan ubin-peta yang terbuat dari ribuan kotak kotak. Saat ini, setiap kotak memiliki collider persegi untuk memeriksa tabrakan.
Namun, dengan ribuan blok kecil, memeriksa semuanya untuk tabrakan tidak efisien. Jika saya tahu tilemap akan terlihat seperti ini sebelumnya, saya bisa saja menggunakan 3 atau 4 colliders besar daripada ribuan yang kecil:
Apakah ada semacam algoritma standar untuk menggabungkan banyak ubin kecil yang berdekatan menjadi yang besar secara maksimal? Jika demikian, dapatkah seseorang menggambarkannya di sini, atau merujuk ke literatur tentang algoritma seperti itu?
Sebagai alternatif, mungkin pra-pemrosesan ubin colliders dengan cara ini adalah pendekatan yang sepenuhnya salah. Jika demikian, apa yang benar untuk menangani efisiensi jumlah colliders yang sangat besar?
sumber
Jawaban:
Saya menemukan algoritm ini berguna untuk mesin love2d ( bahasa lua )
https://love2d.org/wiki/TileMerging
Berikut ikuti contoh love2d pada proyek saya saat ini. Merah Anda dapat melihat dinding saya bertabrakan.
sumber
Jika Anda ingin membuat medan yang dapat dirusak, cara saya melakukan ini di Unity, adalah dengan hanya mengatur colliders di blok tepi dunia Anda. Jadi misalnya, inilah yang ingin Anda capai:
Semua blok hijau itu mengandung collider, dan sisanya tidak. Itu menghemat satu ton pada perhitungan. Jika Anda menghancurkan blok, Anda dapat mengaktifkan colliders pada blok yang berdekatan dengan mudah. Perlu diingat bahwa mengaktifkan / menonaktifkan collider adalah mahal dan harus dilakukan hemat.
Jadi, sumber daya Tile terlihat seperti ini:
Ini adalah objek game standar, tetapi juga bisa dikumpulkan. Perhatikan juga bahwa kotak collider diatur untuk dinonaktifkan secara default. Kami hanya akan mengaktifkan jika itu adalah ubin tepi.
Jika Anda memuat dunia Anda secara statis, tidak perlu menyatukan ubin Anda. Anda bisa memuat semuanya dalam satu tembakan, menghitung jaraknya dari tepi, dan menerapkan collider jika diperlukan.
Jika Anda memuat secara dinamis, yang terbaik adalah menggunakan kolam ubin. Ini adalah contoh loop refresh saya yang diedit. Ini memuat ubin berdasarkan tampilan kamera saat ini:
Idealnya, saya akan menulis posting yang jauh lebih rinci, karena ada sedikit lebih banyak terjadi di belakang layar. Namun, ini dapat membantu Anda. Jika ada pertanyaan, jangan ragu untuk bertanya atau menghubungi saya.
sumber