Unity разное поведение физики на разных размерах экрана

Я работаю над 2D-игрой с открытым миром с видом сверху, в которой есть персонаж, которого можно перемещать с помощью функций клавиатуры. Движение вызвано Rigidbody.AddForce().
Проблема в том, что скорость движения неодинакова для разных размеров экрана.

Вот простой код:

void FixedUpdate()
{
    if (Input.GetButton("Move"))
        rigidbody.AddForce(transform.forward * speed);
}

Масса персонажа та же, скорость плавания та же, но все же, после того, как я переключил вид игры на полный экран, очевидно, что персонаж движется быстрее. (Что странно и показывает, что это не проблема с производительностью.)
Я пытался протестировать автономную сборку, там все в порядке (однако сборка для Android кажется немного медленнее.), но мне нужен общий скорость в редакторе, потому что я должен проектировать уровни, которые зависят от времени, а время зависит от скорости.


person Bamdad    schedule 26.03.2019    source источник
comment
Это очень любопытно, ведь в Unity ничего подобного быть не должно. Размер экрана и физика не связаны. Я предлагаю вам сделать так: вывести фактическое значение скорости твердого тела и, возможно, сил в режиме реального времени и посмотреть, что на самом деле происходит. Самый быстрый способ сделать это, вероятно, использовать устаревший графический интерфейс: void OnGUI(){ GUI.Label(new Rect(10, 10, 100, 20), rigidbody.velocity.ToString()); }   -  person Yuri Nudelman    schedule 04.04.2019


Ответы (2)


Физика работает в WorldSpace и не имеет ничего общего с ScreenSpace, поэтому ваша проблема выходит за рамки того, чем кажется. Падение производительности на Android ожидается, но в автономном режиме убедитесь, что вы используете FixedUpdate для физических операций (что вы делаете здесь) и убедитесь, что ничто не вызывает изменения FixedTimeStep во время игра на всякий случай.

person soheilgh    schedule 04.04.2019
comment
Да, спасибо за ответ, я узнал, что в управляемом классе есть метод Update, который влияет на твердое тело. Спасибо, что напомнили мне о FixedUpdate. - person Bamdad; 04.04.2019

Вы пытались умножить свою скорость с помощью Time.fixedDeltaTime? Если это не сработало, попробуйте компиляцию, зависящую от платформы:

    #if UNITY_STANDALONE_WIN
        //do something
    #elif UNITY_ANDROID
        // do something
    #endif
person Spounka    schedule 27.03.2019