Я пытаюсь симулировать давление с помощью набора сферических частиц в игре Unity, которую я создаю. Пара замечаний по поводу проблемы:
- Цель состоит в том, чтобы заполнить постоянно меняющееся 2-мерное пространство / пустоту маленькими сферами без трения. Игра пытается симулировать постоянно растущее давление все большего количества объектов, попадающих в это пространство.
- Сам уровень постоянно прокручивается слева направо, а это означает, что если размеры пространства не изменятся пользователем, он автоматически уменьшится (самая левая часть пространства будет постоянно прокручиваться за пределы экрана).
Мне интересно, какие есть некоторые подходы к решению этих проблем ...
- Зная, когда определить, когда есть место для заполнения, а затем добавить сферы в это пространство.
- Удаление сферы из пространства, когда оно сжимается.
- Стратегии для имитации давления на сферы так, что они «взрываются наружу», когда создается больше места.
Текущий подход, который я рассматриваю, заключается в использовании постоянно движущейся стены, которая находится за пределами экрана и движется вместе с экраном, как показано на этом рисунке:
,
Эта движущаяся стена будет толкать и удерживать сферы в пространстве. Что касается добавления новых сфер, я собирался, чтобы либо (1) сферы размножались при обнаружении свободного пространства, ИЛИ (2) порождали их слева от пространства (где находится стена) - подталкивая остальные сферы к заполнить пространство. Я предвижу проблемы с идеей № 1, потому что это, скорее всего, не будет создавать / имитировать давление; Идея № 2 кажется более многообещающей, но поднимает вопрос о том, как обеспечить место для появления этих новых сферных частиц (и последствиях их появления, когда пространства нет).
Большое спасибо заранее за вашу мудрость!
Каждый цикл, вы должны пройти через все ваши частицы, а затем рассчитать конечную силу на этой частице. По сути, стена всегда дает им положительный вектор силы на оси x, если они сталкиваются с ней (частицы.х - частица.r <= 0).
Затем каждая частица, с которой они сталкиваются, также дает им вектор силы, зависящий от угла между ними. Вы собираете эти углы для всех частиц, вычисляете среднее значение, и все!
Здесь также можно использовать множество методов оптимизации, просто посмотрите учебник по физике шаров. По сути, вы хотите пройти через каждую пару частиц только один раз, рассчитать вектор силы для обоих и сохранить их в них.
Это, в принципе, будет имитировать газы, и если вы дадите им постоянную силу, я полагаю, что и жидкости.
Что касается создания и удаления частиц, я реализую класс ParticleEmitter, у которого есть позиция, направление и некоторые другие полезные вещи. Ваш пример был бы лучше с эмиттером, который может создавать частицы в определенном диапазоне, или даже лучше, прямоугольник.
источник