Estou tentando simular a pressão com uma coleção de partículas esféricas em um jogo do Unity que estou construindo. Algumas notas sobre o problema:
- O objetivo é preencher um espaço / vazio 2d em constante mudança com pequenas esferas sem atrito. O jogo está tentando simular a pressão crescente de mais objetos sendo empurrados para este espaço.
- O nível em si está rolando constantemente da esquerda para a direita, ou seja, se as dimensões do espaço não forem alteradas pelo usuário, ele ficará automaticamente menor (a parte mais à esquerda do espaço rolará continuamente para fora da tela).
Eu estou querendo saber o que algumas abordagens são que eu posso tomar para resolver esses problemas ...
- Saber quando detectar quando há espaço para preencher e adicionar esferas ao espaço.
- Removendo esferas do espaço quando estiver encolhendo.
- Estratégias para simular a pressão nas esferas, de forma que elas "explodam para fora" quando mais espaço é criado.
A abordagem atual que estou pensando em usar uma parede em movimento constante, que está fora da tela e se move com a tela, como mostra a imagem:
.
Essa parede em movimento empurrará e prenderá as esferas no espaço. Quanto à adição de novas esferas, eu teria que (1) esferas se replicar ao detectar espaço livre, OU (2) gerá-las no lado esquerdo do espaço (onde está a parede) - empurrando o restante das esferas para preencha o espaço. Prevejo problemas com a idéia nº 1, porque isso provavelmente não criaria / simularia pressão; A idéia nº 2 parece mais promissora, mas levanta a questão de como fornecer um local para a geração dessas novas partículas de esfera (e as ramificações de gerá-las quando não há espaço).
Muito obrigado antecipadamente por sua sabedoria!
Em cada loop, você deve percorrer todas as suas partículas e calcular uma força final nessa partícula. Basicamente, a parede sempre fornece a eles um vetor de força positiva no eixo x, se eles estiverem colidindo com ela (partícula.x - partícula.r <= 0).
Então, cada partícula com a qual eles colidem também fornece um vetor de força, dependendo do ângulo entre elas. Você coleta esses ângulos para todas as partículas, calcula a média e pronto!
Existem muitas técnicas de otimização que você pode usar aqui também, basta procurar um tutorial de física da bola. Basicamente, você deseja iterar através de cada par de partículas apenas uma vez e calcular o vetor de força para ambos e armazená-lo neles.
Isso simulará gases, basicamente, e se você lhes der uma força constante, também líquidos, eu presumo.
Quanto à criação e exclusão de partículas, implementei uma classe ParticleEmitter, que possui uma posição, direção e outras coisas úteis. Seu exemplo seria melhor com um emissor que pode criar partículas em um determinado intervalo ou, melhor ainda, em um retângulo.
fonte