Unity 6.3
0 онлайн 67 гостей 3 в системе
Вход

Physics.Simulate

Declaration

public static void Simulate(float step);

Параметры

Параметр Описание
шаг Время для продвижения физики.

Описание

Симулирование физики в Scene.

Вызовите эту команду, чтобы вручную симулировать физику, когда режим симулирования установлен на Скрипт. Симуляция включает все стадии обнаружения столкновений, интеграцию жесткого тела и соединений, а также подачу обратных вызовов физики (контакт, триггер и соединения). Вызов Physics.Simulate не вызывает FixedUpdate. MonoBehaviour.FixedUpdate будут всё равно вызываться со скоростью, определенной Time.fixedDeltaTime, независимо от того, установлен ли режим симулирования на Скрипт или нет, и независимо от того, когда вы вызываете Physics.Simulate.

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

Для достижения детерминистических результатов физики, вы должны передавать фиксированное значение шага Physics.Simulate каждый раз, когда вы его вызываете. Обычно step должно быть небольшим положительным числом. Использование значений step, больших, чем 0.03, может привести к неточным результатам.

Дополнительные ресурсы: Physics.simulationMode, SimulationMode.

Вот пример базового моделирования, которое реализует то, что делается в режиме моделирования SimulationMode.FixedUpdate (исключая Time.maximumDeltaTime).

using UnityEngine;

public class BasicSimulation : MonoBehaviour { private float timer;

void Update() { if (Physics.simulationMode != SimulationMode.Script) return; // do nothing if the automatic simulation is enabled

timer += Time.deltaTime;

// Catch up with the game time. // Advance the physics simulation in portions of Time.fixedDeltaTime // Note that generally, we don't want to pass variable delta to Simulate as that leads to unstable results. while (timer >= Time.fixedDeltaTime) { timer -= Time.fixedDeltaTime; Physics.Simulate(Time.fixedDeltaTime); }

// Here you can access the transforms state right after the simulation, if needed } }