J'essaie de simuler la pression avec une collection de particules sphériques dans un jeu Unity que je construis. Quelques notes sur le problème:
- Le but est de remplir un espace / vide 2D en constante évolution avec de petites sphères sans frottement. Le jeu essaie de simuler la pression toujours croissante de plus d'objets poussés dans cet espace.
- Le niveau lui-même défile constamment de gauche à droite, ce qui signifie que si les dimensions de l'espace ne sont pas modifiées par l'utilisateur, il diminuera automatiquement (la partie la plus à gauche de l'espace défilera continuellement hors écran).
Je me demande quelles sont les approches que je peux adopter pour résoudre ces problèmes ...
- Savoir quand détecter s'il y a de l'espace à remplir, puis ajouter des sphères à l'espace.
- Suppression des sphères de l'espace lorsqu'il rétrécit.
- Stratégies pour simuler la pression sur les sphères de sorte qu'elles "explosent vers l'extérieur" lorsque plus d'espace est créé.
L'approche actuelle que j'envisage est d'utiliser un mur en mouvement constant, qui est hors écran et se déplace avec l'écran, comme l'illustre cette image:
.
Ce mur mobile poussera et emprisonnera les sphères dans l'espace. Quant à l'ajout de nouvelles sphères, j'allais faire en sorte que (1) les sphères se reproduisent lors de la détection d'espace libre, OU (2) les fassent apparaître sur le côté gauche de l'espace (où se trouve le mur) - poussant le reste des sphères à remplir l'espace. Je prévois des problèmes avec l'idée n ° 1 car cela ne créerait / ne simulerait probablement pas vraiment la pression; L'idée n ° 2 semble plus prometteuse, mais pose la question de savoir comment fournir un emplacement pour que ces nouvelles particules de sphère apparaissent (et les ramifications de leur apparition lorsqu'il n'y a pas d'espace).
Merci d'avance pour votre sagesse!
À chaque boucle, vous devez parcourir toutes vos particules, puis calculer une force finale sur cette particule. Fondamentalement, le mur leur donne toujours un vecteur de force positive sur l'axe x, s'ils entrent en collision avec lui (particule.x - particule.r <= 0).
Ensuite, chaque particule avec laquelle ils entrent en collision leur donne également un vecteur de force, selon l'angle entre eux. Vous collectez ces angles pour toutes les particules, calculez la moyenne, et c'est parti!
Il existe de nombreuses techniques d'optimisation que vous pouvez également utiliser ici, il suffit de rechercher un didacticiel sur la physique des billes. Vous voulez essentiellement parcourir chaque paire de particules une seule fois et calculer le vecteur de force pour les deux et le stocker en elles.
Cela simulera essentiellement les gaz, et si vous leur donnez une force constante, les liquides aussi, je présume.
Quant à la création et à la suppression de particules, j'implémente une classe ParticleEmitter, qui a une position, une direction et quelques autres trucs utiles. Votre exemple serait mieux avec un émetteur qui peut créer des particules dans une certaine plage, ou mieux encore, un rectangle.
la source