Ребята, небольшой затык случился в
Ребята, небольшой затык случился в Unity3D. У меня почему-то физические джоинты по-разному работают в редакторе и в сборке. В чем может быть дело? Параметры одни и те же, а в сборке ConfigurableJoint гнется в 2-3 раза хуже, чем в редакторе.
FPS и там и там одинаковый. Еще заметил что если fixedDeltaTime сделать в настройках больше, то механизмы гнутся лучше. Проверил fixedDeltaTime везде одинаковый (0.02).
- 02 июля 2016, 16:12
- 00
Попробуй поставить в окошке Game разные разрешения и посмотри, меняется ли поведение, возможно зависит от разрешения экрана (не меняется ли физика от движения мыши и т.п.? Разрешение может влиять на это)
И классическая ошибка - проверь, происходят ли все физические действия в FixedUpdate(), а не Update()
Так, круг сужается. Эта штука проявляется только в одиночной игре.
В мультиплеере все работает нормально. Возможно дело в неправильной синхронизации по сети.
Еще такой вопрос. Когда окно игры видно на экране, она кушает 3-5% ЦП. Когда открываю что-то поверх и перекрываю все окно игры целиком, или сворачиваю игру - 18-27% ЦП. Из-за чего такое может быть? Отключается камера и возрастает FPS?
Филлрейт нагружается, винда(или иксы) рисует содержание твоего окна поверх другого и соотвественно тому приложению надо рисовать кусок два раза. Поэтому и сильнее нагрузка
Т. е. надо отключать рендеринг после потери фокуса окна?
Снова здравствуйте. Выяснилось что при сворачивании или полном перекрытии окна резко уменьшался Time.deltaTime и подскакивал FPS. Решил проблему, выставив ограничение на частоту кадров в 60.
Теперь при длительной работе приложения индикатор FPS сводит с ума. Он начинает показывать тысячи кадров в секунду и постоянно дергается, но нагрузки на ЦП при этом нет.
Код обновления FPS внутри Update такой (coef = 1.0f):
Возможно проблема в том что Time.deltaTime начинает скакать от нормальных до неприлично малых значений.
Пока заменил на подсчет кол-ва вызовов Update в течение секунды, но еще не испытывал как себя будет вести.
В чем может быть проблема?
По-моему количество вызовов - единственно верное решение.
Всё верно - нагрузки на процессор нет, поэтому куча кадров генерируется просто так, поэтому их и много. Но это же способ считать кадры для дельта-тайминга, а не для фиксированных кадров.
Запустил вечером новый вариант, утром - проверил.
Если вечером стабильно dt = 16, а FPS = 60, то утром dt иногда равняется 0, а FPS меняется в пределах от 150 до 380. Причем нагрузки на ЦП нет (как раньше), что дает повод усомниться в достоверности этих данных.
Какие есть предположения?
Поделал скриншотов, dt меняется примерно след. образом:
0, 16, 0, 0, 0, 16, 0, 0, 16, 0, 0, 0, 0
т. е. очень много пустых вызовов Update без dt.
Есть еще такое предложение что Time.time хранится как float и ему не хватает точности через большое кол-во времени, поскольку Time.deltaTime - это разница между текущим и предыдущим значением Time.time.
Еще заметил что такая фигня происходит только на выделенном сервере и во время боя. Пока находимся на начальном экране, FPS и dt снова ведут себя нормально.
1. Не могу. Time.deltaTime - это значение из самого движка, его тип нельзя поменять.
2. Конечно можно. Только частоту вызовов Update самим движком это не уменьшит.
Сейчас сервер запущен 2-ой день. FPS: 480-690, за dt уже не слежу. Проц грузится на 21-25%.
Короче, пока могу считать что Unity3D не предусмотрен для длительной работы игры.
Это как-то очень странно. Тут нужно мнение Нупра. (вряд ли он этот пост читал, напиши ему лично)
Можно ли как-то прервать вызов Network.Connect? А то пока он сам не вернет управление - ничего нельзя сделать.
Запускай его в другом потоке, например.
Triggered
Сеть работает в потоке движка, лол. Если ты не про дотнетовские классы.
И на мобилках просто так создать 1000 потоков нельзя.