#unity3d #game-physics #physx
#unity-игровой движок #игра-физика #physx
Вопрос:
Я работаю над 2D-игрой с открытым миром сверху вниз, в которой есть персонаж, которого можно перемещать с помощью функций клавиатуры. Движение вызвано жестким телом.AddForce().
Проблема в том, что скорость перемещения неодинакова при разных размерах экрана.
Вот простой код:
void FixedUpdate()
{
if (Input.GetButton("Move"))
rigidbody.AddForce(transform.forward * speed);
}
Масса персонажа одинакова, скорость перемещения одинакова, но все же, после того, как я переключаю режим просмотра игры на полноэкранный режим, очевидно, что персонаж движется быстрее. (Что странно и показывает, что это не проблема с производительностью.)
Я пытался протестировать автономную сборку, там все в порядке (однако в сборке Android это кажется немного медленнее.) но мне нужно иметь общую скорость в редакторе, потому что я должен разрабатывать уровни, которые зависят от времени, а время зависит от скорости.
Комментарии:
1. Это очень любопытно, поскольку в Unity не должно быть ничего подобного. Размер экрана и физика не связаны. Я предлагаю вам поступить следующим образом: вывести фактическое значение скорости твердого тела и, возможно, сил в режиме реального времени и посмотреть, что происходит на самом деле. Вероятно, самый быстрый способ сделать это — использовать устаревший графический интерфейс:
void OnGUI(){ GUI.Label(new Rect(10, 10, 100, 20), rigidbody.velocity.ToString()); }
Ответ №1:
Физика работает в мировом пространстве и не имеет ничего общего с ScreenSpace, так что ваша проблема выходит за рамки того, чем она кажется. Ожидается снижение производительности на Android, но в standalone убедитесь, что вы используете FixedUpdate для физических операций (что вы делаете здесь) и убедитесь, что ничто случайно не приводит к изменению FixedTimeStep во время игры.
Комментарии:
1. Да, спасибо за ответ, я узнал, что в управляемом классе был метод Update, который воздействовал на rigidbody. Спасибо, что напомнили мне о FixedUpdate.
Ответ №2:
вы пытались увеличить скорость со временем.исправлено время задержки? Если это не сработало, попробуйте компиляцию, зависящую от платформы:
#if UNITY_STANDALONE_WIN
//do something
#elif UNITY_ANDROID
// do something
#endif