Функции работают медленнее на Android.

Общие вопросы о Unity3D

Функции работают медленнее на Android.

Сообщение Kabanelloo 30 ноя 2018, 18:45

Доброго времени суток!

Достаточно не сложный код, минимальные действия работы функции на ПК - работает безупречно!
Я делаю билд и запускаю на Honor 6x , и функция заметно работает медленнее!! До этого у меня были Карутины,
работало также, я замених их на Update более костыльным способом , чтобы убедится, что карутины работают хуже чем Update.

Думал отправить в отдельный поток, но юнити не дала этого сделать...

На выходе одно и тоже.. Стал винить функции класса Mathf такие как Abs , Lerp... помогите плиз, в сцене 20 дровколов. 60 fps стабильно.. Но скорость работы функций не меняется.

вот код из функции! ИЗИ костыль. Разница с компьютером 190 fps и на телефоне 60fps , настройки полностью Low, верт синхронизации нет, света нет only ambient, рефлекшинов нет, в общем голяк.

Синтаксис:
Используется csharp
    public void ManeuverUp()
    {
        if (myTransform.position.y < RadiusManeuver) // Атака + движение
        {
            float y = Mathf.Lerp(myTransform.position.y, RadiusManeuver * 2, speedUpDown / 100);
            myTransform.position = new Vector3(myTransform.position.x, y, myTransform.position.z);

            if (targetRoad != null)
            {
                float a = Mathf.Abs(targetRoad.transform.position.y + CollisionRoadDistance);
                float b = Mathf.Abs(myTransform.position.y);

                if (b <= a && ExplosionRoad)
                {
                    targetRoad.Destruction(Part.AllLines);
                    ExplosionRoad = false;
                }
            }
        }
    }
 


мучаюсь не могу понять ) Может кто сталкивался?
Kabanelloo
UNIт
 
Сообщения: 113
Зарегистрирован: 03 фев 2012, 21:55

Re: Функции работают медленнее на Android.

Сообщение Kabanelloo 30 ноя 2018, 19:05

Вооот оно в чем, на компьютере отключена вертикальная синхронизация, а на телефоне она включается автоматически, таким образом количество кадров на компьютере больше чем 60 и функция просчитывается быстрее.
Но отключить вертикальную синхронизацию через скрипт не удалось... Но теперь тогда буду делать с ней в момент разработки и будет явно видно что можно корректировать.
Kabanelloo
UNIт
 
Сообщения: 113
Зарегистрирован: 03 фев 2012, 21:55

Re: Функции работают медленнее на Android.

Сообщение KanycTa 30 ноя 2018, 19:45

Kabanelloo писал(а):Вооот оно в чем, на компьютере отключена вертикальная синхронизация, а на телефоне она включается автоматически, таким образом количество кадров на компьютере больше чем 60 и функция просчитывается быстрее.
Но отключить вертикальную синхронизацию через скрипт не удалось... Но теперь тогда буду делать с ней в момент разработки и будет явно видно что можно корректировать.


Почему вы все используете Update как отправную точку для жизни кода своей игры?
Ты же понимаешь что Update вызывается каждый кадр и при падении FPS игра полностью может зависнуть, используй FixedUpdate (в настройках Time можно подкрутить сколько раз за секунду можно вызывать обновление)

Выставляй Fixed Timestamp = 1/60 = 0.016 ms (за 1 секунду FixedUpdate вызовется 60 раз)
Аватара пользователя
KanycTa
UNIт
 
Сообщения: 107
Зарегистрирован: 25 июл 2018, 18:41
Откуда: г. Ульяновск
  • Сайт

Re: Функции работают медленнее на Android.

Сообщение Anonymyx 01 дек 2018, 05:06

Т.е. вместо того чтобы умножить все операции на deltaTime, вы предлагаете засунуть это в FixedUpdate() который предназначен только для физики и выкрутить значение параметра который отвечает за интервалы между просчетами физики, тем самым нарушив баланс во всей вселенной?
Аватара пользователя
Anonymyx
Адепт
 
Сообщения: 1934
Зарегистрирован: 05 апр 2015, 15:55

Re: Функции работают медленнее на Android.

Сообщение DimaJoke 01 дек 2018, 20:55

Anonymyx писал(а): тем самым нарушив баланс во всей вселенной?

Изображение
KartonCreations
Аватара пользователя
DimaJoke
UNITрон
 
Сообщения: 185
Зарегистрирован: 12 авг 2018, 18:59
Откуда: Ульяновск
Skype: dima34586
  • Сайт

Re: Функции работают медленнее на Android.

Сообщение KanycTa 01 дек 2018, 21:58

Anonymyx писал(а):Т.е. вместо того чтобы умножить все операции на deltaTime, вы предлагаете засунуть это в FixedUpdate() который предназначен только для физики и выкрутить значение параметра который отвечает за интервалы между просчетами физики, тем самым нарушив баланс во всей вселенной?


Какой баланс дурень?
в Update необходимо использовать Time.deltaTime
в FixedUpdate необходимо использовать только! ТОЛЬКО!!! Time.fixedDeltaTime
Аватара пользователя
KanycTa
UNIт
 
Сообщения: 107
Зарегистрирован: 25 июл 2018, 18:41
Откуда: г. Ульяновск
  • Сайт

Re: Функции работают медленнее на Android.

Сообщение Anonymyx 01 дек 2018, 22:05

Перечитайте мой пост еще раз, попробуйте осмыслить и понять что там написано. Потом прочтите свой ответ и задумайтесь.

в FixedUpdate необходимо использовать только! ТОЛЬКО!!! Time.fixedDeltaTime

Где это написано?
Time.deltaTime: when called from inside MonoBehaviour's FixedUpdate, returns the fixed framerate delta time.

Я что-то тут не вижу запрета.
Аватара пользователя
Anonymyx
Адепт
 
Сообщения: 1934
Зарегистрирован: 05 апр 2015, 15:55

Re: Функции работают медленнее на Android.

Сообщение Kabanelloo 04 дек 2018, 19:16

Спасибо ребята, да конечно есть проблемы если просядет FPS то и просчет будет не правильный. Но у меня Update не является отправной точкой. Это как одна из возможностей, которые я не использую. У меня часто карутины и Invoke на Awake , события... Update ни в одном коде нет. Но все равно были проседания в скорости. Как я выявил, что разница была из за разного fps устройств, по этому на ПК я синхронизировал с мобильным устройством. Тогда все заработало корректно. Конечно же я добавлю компенсацию FPS чтобы приложение работало на множество устройств.
Kabanelloo
UNIт
 
Сообщения: 113
Зарегистрирован: 03 фев 2012, 21:55

Re: Функции работают медленнее на Android.

Сообщение Anonymyx 04 дек 2018, 19:45

Если эта функция выполняется за весь период жизни объекта, то засуньте его в Update(), делать через корутину смысла нет.
А чтобы это не зависело от FPS, просто умножьте float y = Mathf.Lerp(myTransform.position.y, RadiusManeuver * 2, speedUpDown / 100); вот это Time.deltaTime.
Синтаксис:
Используется csharp
 float y = Mathf.Lerp(myTransform.position.y, RadiusManeuver * 2, speedUpDown / 100 * Time.deltaTime)
Аватара пользователя
Anonymyx
Адепт
 
Сообщения: 1934
Зарегистрирован: 05 апр 2015, 15:55

Re: Функции работают медленнее на Android.

Сообщение Kabanelloo 07 дек 2018, 11:12

О круто я если заменю дельту на какую-то свою статическую с похожим значением , я получу одинаковые расчеты каждой функции в которой она используется. Или фпс все равно может мне палки в колеса сувать?)
Kabanelloo
UNIт
 
Сообщения: 113
Зарегистрирован: 03 фев 2012, 21:55

Re: Функции работают медленнее на Android.

Сообщение Anonymyx 07 дек 2018, 14:20

А зачем заменять? Если вам надо контролировать скорость передвижения, просто доумножьте это значение на выражение.
Вы не можете знать примерное значение deltaTime, он как раз зависит от FPS, это время за которое обработался предыдущий кадр.

Вон у вас есть же speedUpDown.
Аватара пользователя
Anonymyx
Адепт
 
Сообщения: 1934
Зарегистрирован: 05 апр 2015, 15:55

Re: Функции работают медленнее на Android.

Сообщение DaffyRaccoon 07 дек 2018, 14:57

Anonymyx писал(а):
в FixedUpdate необходимо использовать только! ТОЛЬКО!!! Time.fixedDeltaTime

Где это написано?


в fixedUpdate действительно можно (и судя по справке лучше) использовать Time.DeltaTime. Оно все равно возвратит правильное значение в зависимости от того в какой функции вызывается.
Аватара пользователя
DaffyRaccoon
UNец
 
Сообщения: 12
Зарегистрирован: 29 июл 2017, 17:57
Откуда: Владивосток
Skype: DaffyRaccoon
  • ICQ

Re: Функции работают медленнее на Android.

Сообщение DaffyRaccoon 07 дек 2018, 15:07

KanycTa писал(а):Почему вы все используете Update как отправную точку для жизни кода своей игры?


Я например использую потому что Unity сами рекомендуют так делать, к тому же эта функция как раз нарисована в секции "game logic" на схеме жизненного цикла скрипта. А чем плох update? Я просто сам только изучаю юнити, хотелось бы узнать.
Аватара пользователя
DaffyRaccoon
UNец
 
Сообщения: 12
Зарегистрирован: 29 июл 2017, 17:57
Откуда: Владивосток
Skype: DaffyRaccoon
  • ICQ

Re: Функции работают медленнее на Android.

Сообщение seaman 07 дек 2018, 19:22

seaman
Адепт
 
Сообщения: 7535
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Функции работают медленнее на Android.

Сообщение Kabanelloo 07 дек 2018, 21:26

Anonymyx писал(а): deltaTime, он как раз зависит от FPS, это время за которое обработался предыдущий кадр.


Все ясно, мне не скорость передвижения интересны, а как не зависеть от фпс и делать просчеты всегда одинаковые в одно и тоже время.

Как ранее я описал что фпс влияет на скорость просчетов, я фпс синхронизировал с устройством, сейчас все удачно работает. А что будет когда устройство слабее моего запустит игру, то фпс его просядит и просчеты будут другие, события будут происходить позже или раньше чем закончиться просчет функции которые к примеру при 60 фпс заканчивали работу вовремя. То будут расходы в сценарии и игра будет не корректно выглядеть.

То либо игру оптимизировать для всех устройств или ограничить сильно слабые устройства играть в игру.

Ну или есть некий паттерн который адаптивно решает проблему с разным фпс?
Kabanelloo
UNIт
 
Сообщения: 113
Зарегистрирован: 03 фев 2012, 21:55

След.

Вернуться в Общие вопросы

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10