Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Руководство API скрипты

Объявление

public void Simulate(float step);

Параметры

step Время, чтобы продвинуть физику.

Возвращает

void Была ли запущена симуляция или нет. Запуск симуляции во время обратных вызовов физики всегда завершается ошибкой.

Описание

Смоделируйте физику, связанную с этой PhysicsScene.

При вызове этого метода физика моделируется в течение заданного step времени. Будет смоделирована только физика, связанная с этой PhysicsScene. Если эта PhysicsScene не является физической сценой по умолчанию (см. Physics.defaultPhysicsScene), то она связана с определенной Scene, поэтому при запуске имитации затрагиваются только компоненты, добавленные в эту Scene.

Если вы передаете значения шага, зависящие от частоты кадров (например, Time.deltaTime), в физический движок, ваша симуляция будет менее детерминированной из-за непредсказуемых колебаний частоты кадров. что может возникнуть. Чтобы получить более детерминированные физические результаты, вы должны передавать фиксированное значение шага в PhysicsScene.Simulate каждый раз, когда вы его вызываете.

Вы можете вызвать PhysicsScene.Simulate в редакторе вне игрового режима, однако следует соблюдать осторожность, так как это приведет к перемещению игрового объекта, имеющего прикрепленный компонент Rigidbody. При симуляции в редакторе вне режима игры происходит полная симуляция всех физических компонентов, включая Rigidbody, Collider и Joint, включая генерацию контактов, однако контакты не передаются через стандартные обратные вызовы скрипта. Это мера безопасности, позволяющая запретить обратным вызовам удалять объекты в сцене, что не является отменяемой операцией. Вот пример базовой симуляции, реализующей то, что делается в режиме автоматической симуляции.

using UnityEngine; public class BasicSimulation : MonoBehaviour { public PhysicsScene physicsScene; private float timer; void Update() { if (!physicsScene.IsValid()) return; // do nothing if the physics Scene is not valid. timer += Time.deltaTime; // Догоняем игровое время. // Продвижение физического моделирования частями Time.fixedDeltaTime // Обратите внимание, что обычно мы не хотим передавать переменную delta в Simulate, так как это приводит к нестабильным результатам. while (timer >= Time.fixedDeltaTime) { timer -= Time.fixedDeltaTime; physicsScene.Simulate(Time.fixedDeltaTime); } // Here you can access the transforms state right after the simulation, if needed... } }
Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
API скрипты 2021.3