Unity 6.3
0 онлайн 97 гостей 3 в системе
Вход
2D разработка игр Шаг 165 из 198

Оптимизация LowLevelPhysics2D API с многопоточностью

Примечание: Эта документация посвящена написанию C# скрипты с использованием LowLevelPhysics2D API. Использовать 2D физики в Unity Editor используя компоненты, такие как Rigidbody 2D компонент, см. 2D физика вместо этого.

Чтобы повысить производительность LowLevelPhysics2D API, используйте доступные ядра CPU для запуска физики и свой собственный 2D физический код на нескольких потоках.

Запуск моделирования на нескольких потоках

Чтобы увеличить количество рабочих потоков, используемых физикой 2D для вычисления симуляции, установите свойство Simulation Workers после того, как вы создадите мир. Количество CPU ядер на вашем устройстве может означать, что система использует меньше потоков, чем вы запрашивали.

Чтобы избежать проблем с производительностью, избегайте изменения количества рабочих моделей во время выполнения.

Запуск собственного кода на нескольких потоках

Запустить LowLevelPhysics2D API методов на всех имеющихся CPU ядра, используйте система работы для разделения вычислений между рабочими потоками. Например, используйте несколько потоков для проверки на пересечения между очень большим количеством физических объектов.

Большая часть API является потоковой безопасной, что означает, что несколько рабочих потоков могут читать и записывать одни и те же физические данные, не мешая друг другу. В мире физики любое количество потоков может одновременно читать данные, но только один поток может записывать данные одновременно. Это называется механизмом блокировки Write Once, Read Many (WORM).

Каждый мир физики изолирован от остальных, так что вы можете записывать данные в различные миры физики на разных потоках одновременно.

Следующие методы не гарантируют безопасность потока, поэтому их нельзя использовать в системе заданий:

  • Create, например PhysicsBody.Create
  • CreateBatch, например PhysicsBody.CreateBatch
  • Destroy, например PhysicsBody.Destroy
  • DestroyBatch, например PhysicsBody.DestroyBatch

Дополнительные сведения о создании многопоточного задания см. в разделе Создание и запуск задания.

Дополнительные ресурсы