Я бы так сделал (в Unity ограничение по времени работы физики на кадр задается):
var physicsStep = 1f/100f; // 100 раз в секунду обновлять физику
var maxPhysicsTimePerFrame = 0.15f; // максимальное время работы физики за кадр
var lastTime = Now();
var physicsTimer = 0; // накопитель времени физики
while(true){
var currentTime = Now();
var deltaTime = currentTime - lastTime;
lastTime = currentTime;
physicsTimer += deltaTime;
Update(deltaTime);
Render();
var physicsSteps = (int)(physicsTimer / physicsStep); // число шагов физики
physicsTimer -= physicsStep*physicsSteps; // сбрасываем таймер физики (оставляем остаток)
var physicsWorkTime = 0;
var physicsStartTime= Now();
for(int i = 0; i < physicsSteps; i++){
UpdatePhysics(physicsStep); // обновление физики
var physicsEndTime = Now();
physicsWorkTime += physicsEndTime - physicsStartTime;
physicsStartTime = physicsEndTime;
// ограничение по времени работы физики
if(physicsWorkTime >= maxPhysicsTimePerFrame )
break;
}
}