Страница 1 из 2

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

СообщениеДобавлено: 30 ноя 2018, 18:45
Kabanelloo
Доброго времени суток!

Достаточно не сложный код, минимальные действия работы функции на ПК - работает безупречно!
Я делаю билд и запускаю на 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;
                }
            }
        }
    }
 


мучаюсь не могу понять ) Может кто сталкивался?

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

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

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

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


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

Выставляй Fixed Timestamp = 1/60 = 0.016 ms (за 1 секунду FixedUpdate вызовется 60 раз)

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

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

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

СообщениеДобавлено: 01 дек 2018, 20:55
DimaJoke
Anonymyx писал(а): тем самым нарушив баланс во всей вселенной?

Изображение

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

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


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

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

СообщениеДобавлено: 01 дек 2018, 22:05
Anonymyx
Перечитайте мой пост еще раз, попробуйте осмыслить и понять что там написано. Потом прочтите свой ответ и задумайтесь.

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

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

Я что-то тут не вижу запрета.

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

СообщениеДобавлено: 04 дек 2018, 19:16
Kabanelloo
Спасибо ребята, да конечно есть проблемы если просядет FPS то и просчет будет не правильный. Но у меня Update не является отправной точкой. Это как одна из возможностей, которые я не использую. У меня часто карутины и Invoke на Awake , события... Update ни в одном коде нет. Но все равно были проседания в скорости. Как я выявил, что разница была из за разного fps устройств, по этому на ПК я синхронизировал с мобильным устройством. Тогда все заработало корректно. Конечно же я добавлю компенсацию FPS чтобы приложение работало на множество устройств.

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

СообщениеДобавлено: 04 дек 2018, 19:45
Anonymyx
Если эта функция выполняется за весь период жизни объекта, то засуньте его в 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)

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

СообщениеДобавлено: 07 дек 2018, 11:12
Kabanelloo
О круто я если заменю дельту на какую-то свою статическую с похожим значением , я получу одинаковые расчеты каждой функции в которой она используется. Или фпс все равно может мне палки в колеса сувать?)

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

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

Вон у вас есть же speedUpDown.

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

СообщениеДобавлено: 07 дек 2018, 14:57
DaffyRaccoon
Anonymyx писал(а):
в FixedUpdate необходимо использовать только! ТОЛЬКО!!! Time.fixedDeltaTime

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


в fixedUpdate действительно можно (и судя по справке лучше) использовать Time.DeltaTime. Оно все равно возвратит правильное значение в зависимости от того в какой функции вызывается.

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

СообщениеДобавлено: 07 дек 2018, 15:07
DaffyRaccoon
KanycTa писал(а):Почему вы все используете Update как отправную точку для жизни кода своей игры?


Я например использую потому что Unity сами рекомендуют так делать, к тому же эта функция как раз нарисована в секции "game logic" на схеме жизненного цикла скрипта. А чем плох update? Я просто сам только изучаю юнити, хотелось бы узнать.

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

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

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

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


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

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

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

Ну или есть некий паттерн который адаптивно решает проблему с разным фпс?