Телепортация, а не перемещение...

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Телепортация, а не перемещение...

Сообщение Nubila 16 июл 2018, 15:18

Привет! Заметил в своём теста 2D платформера, что персонаж передвигается с фризами. В сцене присутствуют:
Камера ,куб на фоне(имитирующий поверхность, без колайдера), дирекшн лайт, Холст , на котором 3 кнопки и виртуальный джостик. На самом персонаже скрипт передвижения, Capsule Collider и RigidBody с выключенным UseGravity. Скрипт передвижения HeroMove:
Синтаксис:
Используется csharp
void Update()
    {
        if (ManagerOfManagers._single._JoyStick.OutCoord != Vector2.zero &&//OutCoord является Vector2 направление джостика
            lastMovement == movement)
        {
            isMoving = true;

            var coord = ManagerOfManagers._single._JoyStick.OutCoord;
            movement = coord * _speed * Time.deltaTime;

            transform.position = new Vector3(transform.position.x + movement.x, transform.position.y + movement.y);//трансформ закеширован

            lastMovement = movement;
        }
        else
            isMoving = false;
    }

Весь этот скрипт максимально потребляет 0.06ms(чекал при помощи стандартного дип профайлера).

Вся проблема начинается когда FPS залочиваю до 60(для смартфонов). Тогда заметно что персонаж двигается мелкими-мелкими рывками, и иногда получаю какие то мини-фризы. В настройки Time я не лез, там всё по стандарту. Движение, как видите, не реализовано при помощи физики.

Вот пару скринов профайлера (кликабельны, там качество):
Изображение
Изображение
Изображение
Изображение

В чём же может быть проблема, подскажите пожалуйста.
Аватара пользователя
Nubila
UNITрон
 
Сообщения: 160
Зарегистрирован: 12 июл 2017, 15:59
Откуда: Запорожье

Re: Телепортация, а не перемещение...

Сообщение 1max1 16 июл 2018, 15:52

Вся проблема начинается когда FPS залочиваю до 60(для смартфонов)

Как залочиваешь? После лока ты тестил и лаги были и в редакторе и на смарте?
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Телепортация, а не перемещение...

Сообщение Nubila 16 июл 2018, 17:10

1max1 писал(а):
Вся проблема начинается когда FPS залочиваю до 60(для смартфонов)

Как залочиваешь? После лока ты тестил и лаги были и в редакторе и на смарте?

Application.targetFrameRate = 60;

Для смарта ничего по сути не меняется, так как там что лочить что нет, всё равно будет 60 кадров. В редакторе конечно они заметнее, на смарте больше похоже как раз на телепортацию на короткую дистанцию. Сразу не заметно, если всмотреться то становится видно, но глаз режет. Могу видик записать)
Аватара пользователя
Nubila
UNITрон
 
Сообщения: 160
Зарегистрирован: 12 июл 2017, 15:59
Откуда: Запорожье

Re: Телепортация, а не перемещение...

Сообщение immeasurability 16 июл 2018, 18:05

физический объект НЕ!!! двигают через transform.position
Discord era#6140

youtube.com/user/immeasurability/videos
Аватара пользователя
immeasurability
Адепт
 
Сообщения: 1097
Зарегистрирован: 08 авг 2013, 18:09

Re: Телепортация, а не перемещение...

Сообщение 1max1 16 июл 2018, 18:09

Вряд ли лаги из-за этого, глядя на профайлер я не вижу чтобы скрипты просаживали фпс, возможно твой скрипт просто криво работает, возможно твой джойстик выдает скачковые значения.
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Телепортация, а не перемещение...

Сообщение Nubila 16 июл 2018, 20:01

immeasurability писал(а):физический объект НЕ!!! двигают через transform.position

оО. Вот этого не знал вообще. Спасибо! А есть инфа какая то об этом?
Аватара пользователя
Nubila
UNITрон
 
Сообщения: 160
Зарегистрирован: 12 июл 2017, 15:59
Откуда: Запорожье


Re: Телепортация, а не перемещение...

Сообщение Nubila 16 июл 2018, 20:06


Ты не понял) Я имел ввиду , почему ЗАПРЕЩЕНО двигать физ обьекты через трансформ.
Аватара пользователя
Nubila
UNITрон
 
Сообщения: 160
Зарегистрирован: 12 июл 2017, 15:59
Откуда: Запорожье

Re: Телепортация, а не перемещение...

Сообщение Anonymyx 16 июл 2018, 20:11

Потому что движение динамического RigidBody рассчитывается физическим движком, каждые FixedUpdate() (Fixed timestep в настройках). Получается, и движок обрабатывает движение объекта, и ты в Update() меняешь позицию объекта, отсюда и конфликты.
Аватара пользователя
Anonymyx
Адепт
 
Сообщения: 1973
Зарегистрирован: 05 апр 2015, 15:55

Re: Телепортация, а не перемещение...

Сообщение Nubila 16 июл 2018, 20:15

Anonymyx писал(а):Потому что движение динамического RigidBody рассчитывается физическим движком, каждые FixedUpdate() (Fixed timestep в настройках). Получается, и движок обрабатывает движение объекта, и ты в Update() меняешь позицию объекта, отсюда и конфликты.

А каким образом движок обрабатывает движение объекта?
Аватара пользователя
Nubila
UNITрон
 
Сообщения: 160
Зарегистрирован: 12 июл 2017, 15:59
Откуда: Запорожье

Re: Телепортация, а не перемещение...

Сообщение Anonymyx 16 июл 2018, 20:18

Физический движок? Там вроде PhysX используется. Как именно, хз, очевидно с помощью математических формул :)
Аватара пользователя
Anonymyx
Адепт
 
Сообщения: 1973
Зарегистрирован: 05 апр 2015, 15:55

Re: Телепортация, а не перемещение...

Сообщение Nubila 16 июл 2018, 20:21

Anonymyx писал(а):Физический движок? Там вроде PhysX используется, как именно рассчитывает, хз, очевидно с помощью математических формул :)

Я к тому, что я не запускал же на нём никаких функций для передвижения. Использую Rigidbody и Collider только для лучей и событий столкновения. Похоже что придётся теперь это всё на физику перебрасывать.
Аватара пользователя
Nubila
UNITрон
 
Сообщения: 160
Зарегистрирован: 12 июл 2017, 15:59
Откуда: Запорожье

Re: Телепортация, а не перемещение...

Сообщение Anonymyx 16 июл 2018, 20:22

Можно просто пометить RigidBody как isKinematic, если меняете позицию через .transform.
Аватара пользователя
Anonymyx
Адепт
 
Сообщения: 1973
Зарегистрирован: 05 апр 2015, 15:55

Re: Телепортация, а не перемещение...

Сообщение seaman 16 июл 2018, 20:22

IsKinematic можно. Можно, конечно любые, но могут быть неприятности.
По теме - на скринах этого нет, но вообще фризы при залочивании fps часто появляются из-за gfx.waitforpresent. Это когда CPU или GPU ждут друг-друга. Или CPU не успевает отдать новые данные на отрисовку, или GPU не успевает отрисовать полученные данные. Как с этим бороться я не понял, но хотя бы понятно что это такое.
Вот кто бы мне сказал что это:
Скрытый текст:
Изображение

Здесь еще терпимо - проседания до 40. Было аж до 10!

Да, пример gfx.waitforpresent
Скрытый текст:
Изображение
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Телепортация, а не перемещение...

Сообщение Nubila 16 июл 2018, 20:38

seaman писал(а):IsKinematic можно. Можно, конечно любые, но могут быть неприятности.
По теме - на скринах этого нет, но вообще фризы при залочивании fps часто появляются из-за gfx.waitforpresent. Это когда CPU или GPU ждут друг-друга. Или CPU не успевает отдать новые данные на отрисовку, или GPU не успевает отрисовать полученные данные. Как с этим бороться я не понял, но хотя бы понятно что это такое.
Вот кто бы мне сказал что это:
Скрытый текст:
Изображение

Здесь еще терпимо - проседания до 40. Было аж до 10!

Да, пример gfx.waitforpresent
Скрытый текст:
Изображение

Да, есть такая тема. В 2018.1.5 версии(возможно и в 2к17'ой) это называется немного по другому:
Изображение

По поводу isKinematic я уже думал, но в таком случае я получаю иную проблему:
В игрушке стены всё же есть, и препятствий достаточно. Казалось бы, можно бросать лучи под 0, 90, 180, -90 и запрещать передвижение в соответствующие стороны, НО если объект находится под углом в 45 градусов, то лучи его не поймают, и частично в этот объект можно будет войти.
Последний раз редактировалось Nubila 16 июл 2018, 20:45, всего редактировалось 2 раз(а).
Аватара пользователя
Nubila
UNITрон
 
Сообщения: 160
Зарегистрирован: 12 июл 2017, 15:59
Откуда: Запорожье

След.

Вернуться в Почемучка

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

Сейчас этот форум просматривают: Google [Bot] и гости: 18


cron