Saya mencoba mensimulasikan tekanan dengan koleksi partikel bola di game Unity yang saya bangun. Sepasang orang mencatat tentang masalahnya:
- Tujuannya adalah untuk mengisi ruang 2d yang terus berubah / kosong dengan bola kecil tanpa gesekan. Gim ini mencoba mensimulasikan tekanan yang terus bertambah dari lebih banyak benda yang didorong ke ruang ini.
- Level itu sendiri terus bergulir dari kiri ke kanan, yang berarti jika dimensi ruang tidak diubah oleh pengguna, maka secara otomatis akan semakin kecil (bagian paling kiri dari ruang akan terus bergulir di luar layar).
Saya bertanya-tanya apa beberapa pendekatan yang bisa saya ambil untuk mengatasi masalah ini ...
- Mengetahui kapan harus mendeteksi kapan ada ruang untuk diisi dan kemudian menambahkan bola ke ruang.
- Menghapus bola dari ruang saat menyusut.
- Strategi untuk mensimulasikan tekanan pada bola sedemikian rupa sehingga mereka "meledak ke luar" ketika lebih banyak ruang dibuat.
Pendekatan saat ini yang saya renungkan adalah menggunakan dinding yang terus bergerak, yang mati layar dan bergerak dengan layar, seperti yang diilustrasikan gambar ini:
.
Dinding yang bergerak ini akan mendorong dan menjebak bola ke ruang. Adapun menambahkan bola baru, saya akan memiliki salah satu (1) bola mereplikasi diri mereka saat mendeteksi ruang kosong, ATAU (2) menelurkan mereka di sisi kiri ruang (di mana dinding itu) - mendorong sisa bola ke mengisi ruang. Saya meramalkan masalah dengan ide # 1 karena ini kemungkinan tidak akan benar-benar membuat / mensimulasikan tekanan; Gagasan # 2 tampaknya lebih menjanjikan, tetapi menimbulkan pertanyaan tentang bagaimana menyediakan lokasi bagi partikel-partikel bola baru ini untuk bertelur (dan percabangan memijahnya ketika tidak ada ruang).
Terima kasih banyak sebelumnya atas kebijaksanaan Anda!
Setiap loop, Anda harus mengulangi semua partikel Anda, dan kemudian menghitung gaya final pada partikel itu. Pada dasarnya, dinding selalu memberi mereka vektor gaya positif pada sumbu x, jika mereka bertabrakan dengannya (particle.x - particle.r <= 0).
Kemudian, setiap partikel yang bertabrakan juga memberi mereka vektor gaya, tergantung pada sudut di antara mereka. Anda mengumpulkan sudut-sudut ini untuk semua partikel, menghitung rata-rata, dan ini dia!
Ada banyak teknik optimasi yang dapat Anda gunakan di sini, juga, lihat saja tutorial fisika bola. Anda pada dasarnya ingin mengulangi setiap pasangan partikel hanya sekali dan menghitung vektor gaya untuk keduanya dan menyimpannya di dalamnya.
Ini akan mensimulasikan gas, pada dasarnya, dan jika Anda memberi mereka gaya konstan, cairan juga, saya kira.
Sedangkan untuk membuat dan menghapus partikel, saya menerapkan kelas ParticleEmitter, yang memiliki posisi, arah, dan beberapa hal bermanfaat lainnya. Contoh Anda akan lebih baik dengan emitor yang dapat membuat partikel dalam kisaran tertentu, atau bahkan lebih baik, persegi panjang.
sumber