Dalam gim terbaru yang saya buat, Anda dapat mengiris objek 2D secara sewenang-wenang, ditunjukkan dalam gif ini:
Anda dapat terus memotongnya menjadi ratusan atau ribuan keping. Ini tidak membuat banyak lag, karena mereka selalu dalam keadaan fisika tidur, tetapi ada masalah ketika Anda menyebabkan mereka bergerak.
Saya tidak begitu yakin bagaimana cara membuatnya sehingga tidak ada banyak puing-puing dari memotong sesuatu. Saya benar-benar tidak ingin menghapusnya setelah jangka waktu tertentu; Saya tidak suka bagaimana, jika Anda kembali ke sesuatu yang Anda potong setelah beberapa saat, itu secara acak menghilang.
Bagaimana saya bisa membersihkan puing-puing pemain yang berlebihan?
unity
2d
performance
Ducktor
sumber
sumber
Jawaban:
Pertama-tama, mekanik permainan itu terlihat sangat menyenangkan, jadi selamat memikirkannya! Berikut adalah dua solusi sederhana yang dapat digunakan secara mandiri atau bersama-sama untuk menyelesaikan masalah khusus ini:
Hapus Potongan Sangat Kecil
Tidak ada banyak titik untuk menjaga sekitar tabrakan kecil yang benar-benar tidak akan menghalangi pemain atau memiliki efek nyata pada lingkungan. Menghitung logika tabrakan tambahan sama sekali tidak layak, jadi hapus bagian-bagian ini atau hapus tabrakan.
Batasi Pemotongan Pemain
Memiliki potongan tak terbatas berpotensi membuat banyak teka-teki Anda sangat sederhana jika Anda bisa mengiris setiap benda yang menghalangi menjadi tumpukan bubur. Berikan pemain hanya beberapa potongan untuk bermain (atau membuatnya perlahan terisi kembali dari waktu ke waktu) dan Anda mungkin akan menemukan bahwa itu membuat teka-teki Anda lebih menantang selain menghilangkan rasa sakit berurusan dengan tabrakan pada ribuan fragmen.
sumber
Cari tahu kemacetan Anda
Beberapa ratus benda bergerak seharusnya tidak menjadi masalah. Namun, beberapa ratus benda bertabrakan mungkin. Ini akan membutuhkan beberapa pengujian, namun saya percaya hambatan yang Anda miliki adalah tabrakan.
Ngomong-ngomong, berapa banyak benda yang kita bicarakan? Apa platformnya? Seratus objek untuk game mobile tidak sama dengan seratus untuk game web atau seratus objek untuk game desktop.
Uji permainan yang sama tetapi dengan tabrakan antara objek yang dipotong dinonaktifkan, dan lihat apakah Anda membuatnya ketinggalan pada jumlah objek yang sama. Jika itu masalahnya, itu berarti jumlah benda yang banyak adalah penyebab masalah; jika tidak, tabrakan adalah masalahnya.
Ini akan menginformasikan keputusan Anda tentang apa yang akan Anda lakukan untuk meningkatkan kinerja. Tidak semua gagasan di bawah ini akan berlaku, dan Anda tetap akan perlu pengujian.
Saya tidak akan berbicara tentang mengoptimalkan sejumlah besar objek yang jauh dari pemain, karena masalah tampaknya datang ketika berinteraksi dengan objek.
Jika masalah terjadi ketika berinteraksi dengan objek, tidak jelas bagaimana menghapus objek yang tidak terlihat akan menyelesaikannya ... namun, saya akan menganggap itu mungkin membantu.
Saya hanya akan mengatakan bahwa jika objek yang jauh dari pemain adalah masalah, Anda bisa mulai dengan memiliki level yang lebih kecil, atau melihat ke dalam membagi permainan dalam potongan-potongan yang dapat Anda muat dan lepas tergantung pada ke mana pemain pergi.
Di luar batas
Saya percaya bahwa ketika datang untuk membersihkan puing-puing, hal pertama yang harus dimiliki adalah menghilangkan benda-benda yang berada di luar batas. Misalnya, potongan yang jatuh ke lubang. Jika tidak ada cara agar pemain bisa sampai di sana untuk melihatnya, tidak ada alasan untuk tetap melakukannya.
Saya akan kembali ke sini.
Jadikan lebih realistis (bagian 1)
Ketika Anda memotong kayu dengan gergaji, kapak atau alat serupa, akan ada material yang hilang (untuk serbuk gergaji, serutan, dll). Bahkan jika Anda memotong dengan laser, laser akan membakar kayu. Selain itu, untuk benda yang bukan kayu biasanya akan ada deformasi di sekitar potongan, remuk, dll.
Apa yang saya katakan adalah bahwa potongannya tidak sempurna, dan beberapa materi akan hilang. Anda bisa memodelkan itu dalam game Anda. Benda ajaib memotong merah itu memiliki ketebalan. Hapus ketebalan itu dari objek (tambahkan efek partikel jika Anda merasa terlalu bersalah).
Ini berarti bahwa Anda tidak akan dapat memotong apa pun yang lebih kecil dari ketebalan itu, pada kenyataannya, mencoba melakukannya akan menghapusnya dari permainan. Itu bagus! Ini berarti bahwa ada batas atas jumlah puing yang akan ada, dan ada cara yang sehat secara mekanis untuk membersihkannya dalam game.
Ubah persneling untuk benda kecil
Ini akan bekerja lebih baik jika tabrakan adalah masalahnya.
Setelah sebuah objek terlalu kecil, detail sudut yang berbeda itu kurang relevan. Anda bisa berubah menjadi mekanik tabrakan yang kurang akurat. Misalnya, Anda bisa menggunakan collider lingkaran.
Anda dapat merawat objek yang lebih kecil tanpa bertabrakan; hanya mempertimbangkan tabrakan antara mereka dan benda-benda agen (seperti avatar pemain atau karakter yang dikendalikan AI).
Akhirnya, benda yang sangat kecil bisa berubah menjadi debu (efek partikel).
Jadikan lebih realistis (bagian 2)
Ini akan bekerja lebih baik jika tabrakan adalah masalahnya.
Bahan berubah bentuk dan pecah di bawah tekanan. Jika Anda berakhir dengan benda panjang dengan ketebalan sangat sedikit, pilah menjadi benda-benda yang lebih kecil sehingga mereka dapat mengambil keuntungan dari solusi di atas.
Kita dapat berpura-pura bahwa ketebalannya terlalu sedikit sehingga hancur dan pecah ketika Anda menabraknya.
Gabungkan objek
Ini akan bekerja lebih baik jika jumlah objek adalah masalahnya.
Trik umum yang digunakan banyak gim untuk menangani sejumlah besar drop yang dapat merusak kinerja adalah dengan menggabungkan drop bersama.
Anda dapat mencoba sesuatu yang serupa untuk benda kecil yang berdekatan satu sama lain. Biarkan mereka menjadi objek tunggal. Namun, saya tidak bermaksud menyatukan potongan-potongan itu. Maksud saya membuat objek tunggal untuk menangani fisika mereka; Anda masih bisa mewakili potongan individual yang membentuk objek, mungkin menggunakan teknik yang mirip dengan efek partikel.
Buat lebih realistis (bagian 3)
Pernahkah Anda mendengar tentang angin? Ada angin di dunia nyata.
Gunakan angin untuk mendorong benda kecil menjauh.
Saya tahu itu bisa terdengar kontra intuitif, karena itu berarti benda kecil tidak bisa beristirahat, setidaknya tidak segera. Baca di bawah sebelum Anda membuat keputusan.
Anda dapat menggunakan angin untuk mendorong benda kecil sebelum - atau segera - mereka mulai menumpuk. Yang akan bekerja lebih baik jika Anda menggunakan optimasi untuk objek kecil (seperti menggabungkannya atau menghapus tabrakan di antara mereka).
Selanjutnya, jika Anda dapat menggunakan angin untuk mendorong item ke lubang atau keluar batas, Anda dapat menggunakan sebagai alasan untuk menghapus item. Sudah kubilang aku akan kembali ke sana. Bahkan jika Anda tidak, itu bisa berfungsi sebagai alasan untuk menghapus benda-benda kecil yang terlalu jauh dari pemain, hanya berpura-pura angin menyingkirkan mereka saat pemain tidak melihat.
Anda dapat menghapus beberapa objek saat pemain tidak melihat, Anda mendapat restu.
Selain itu, Anda sekarang memiliki alasan untuk menambahkan angin, yang dapat Anda tambahkan angin sebagai bagian dari mekanika lain atau hambatan dalam permainan. Anda bahkan dapat menambahkan ke dalam narasi semangat angin yang mencoba menjaga kebersihan, jika Anda memang cenderung.
Catatan : Anda tidak perlu harus memicu angin ketika ada puing-puing untuk dibersihkan (meskipun itu akan berhasil), Anda mungkin dapat memiliki angin terjadi secara berkala.
Berang-berang!
Beberapa berang-berang yang mengganggu datang dan mencuri kayu Anda!
Sekarang Anda memiliki tipe musuh!
Selain itu, tentu saja, mereka menghilangkan kayu saat Anda tidak melihat. Anda bahkan dapat mendesainnya sehingga Anda kembali melihat satu berang-berang melarikan diri dengan sepotong kayu yang dulunya adalah tumpukan. Itu akan membuat momen yang mengesankan, akan menjelaskan mengapa kayu menghilang dan akan menyelesaikan beberapa masalah kinerja yang Anda hadapi, sekaligus.
Itu semua adalah kompromi
Ada batasan platform atau alat yang telah Anda pilih, bahkan waktu dan anggaran yang Anda miliki untuk mengembangkan game adalah batasan. Anda tidak dapat membuat simulasi sempurna dari realitas, namun . Tidak ada yang bisa .
Setiap pengembang bekerja dalam batasan yang platform target mereka dan alat yang mereka miliki pada waktu yang dikenakan pada mereka, dan permainan terbaik harus melakukan pertukaran untuk membuat permainan menyenangkan dan menarik ... bahkan jika itu berarti kurang realisme, pada kenyataannya, sering kali mereka menyenangkan dan menarik karena mereka tidak realistis.
Biarkan kreativitas datang dari keterbatasan itu.
Meskipun, Anda juga dapat membuat game Anda lebih realistis , dengan memilih bagian-bagian realitas yang nyaman untuk pengembangan Anda. Pertimbangkan bahwa kadang-kadang menghilangkan benda yang jauh dari pemain adalah bagian dari biaya membuat permainan yang menyenangkan.
sumber
Dunia ini terpisah. Anda tidak dapat membuat objek yang lebih kecil dari piksel, jadi jangan biarkan objek tersebut ada. (Ini mirip dengan beberapa poin realisme yang dibuat oleh Theraot .)
Memang, Anda mungkin mendapatkan ini secara gratis: pemain menentukan garis potong mereka sebagai garis yang pada dasarnya diskrit di layar. Efek dari pemotongan adalah untuk membagi setiap objek menjadi sub-objek yang terdiri, masing-masing, dari piksel pada atau di bawah garis itu, dan piksel secara ketat di atasnya. Objek satu piksel tidak mungkin berada di atas dan di bawah garis, sehingga tidak dapat dipotong oleh algoritma ini.
Jika memotong semua potongan ke dalam piksel individual masih akan meninggalkan Anda dengan terlalu banyak objek untuk dilacak, ukuran minimum yang lebih besar mungkin masih berfungsi.
Atau jangan khawatir tentang itu. Jika pemain siap untuk menghabiskan waktu yang lama memotong benda menjadi debu, mereka jelas tidak terburu-buru sehingga mereka dapat menangani lag yang disebabkannya. ;-)
sumber