4 ошибки в Unity которые совершают начинающие программисты | Часть 1

preview_player
Показать описание
В этом видео я рассказал о 4-ех ошибках которые очень часто совершают начинающие программисты при работе с Unity. Ошибок гораздо больше, и я обязательно выпущу ещё одну часть сразу как мы наберём 400 лайков!

Рекомендации по теме
Комментарии
Автор

1. Использование свойства transform
2. Постоянные проверки в Update
3. Использование непонятных чисел, вместо полей с понятным названием
4. Поиск дочерних объектов

SkelleRok
Автор

Самая главная ошибка, которую может допустить новичок юнити, это смотреть видео с этого канала

mrgscreen
Автор

Роман, если возможно, снимите видео с советами по организации структуры проекта в Unity. Это было бы очень здорово!

gentleNES
Автор

1. Когда что-либо кому-либо разъясняете за Unity необходимо всегда вести ликбез в контексте версии Unity, т.к. то что справедливо в одной версии не всегда справедливо для другой.
2. По поводу 4ого пункта: ItemPresenter не гетнуть как компонент т.к. он не унаследован от Component, и уж тем более не накинуть на геймобжект т.к. он не унаследован от MonoBehaviour (не говоря уже о том что имя наследника MonoBehaviour должно совпадать с именем файла в котором он описан).

SergeyGlukhachev
Автор

1. Поводу этого, намного полезней было бы сказать, что ребята получайте все компоненты при инициализации, затем обращайтесь к методам и полям во время работы. Что-бы лишний раз, не вызывать функции в update, у которых время исполнения гораздо больше.

2. Проверки в Update. Хм, а вы все еще думаете, что создавая события вы тем самым что можете ждать? События также имеют свой стак и также апдейтятся. Проверки здоровья, на столько ничтожно мелкие операции, что не каких тут нагрузок неощутимы. Update неопасен такими операциями, но если вы туда будете засовывать медленные функции (которые долго работают), например какой нибудь find то конечно это уже перебор.

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

VintProg
Автор

На i7 шестилетней давности: луп на миллион итераций дает такие результаты: обращение к кэшированному трансформу: 55мс. Обращение к не кэшированному трансформу: 104мс. Объявление локального инта и проверка его на «меньше или равно»: 6 мс.
Луп на 100к итераций - 5мс, 10мс, 0мс.
Луп на 25к итераций - 1мс, 2мс, 0 мс.
Луп на 10к итераций - 0мс, 0мс, 0мс.

Если объектов до 25-50 тысяч, то имхо смысла с кэшем трансформа запариваться нет. Проверка значений практически не сказывается на производительности.

COOKIEMONSTER
Автор

Хм. А я, когда сделал как в 4 примере, думал - это жуткий костыль. Похоже, хоть к чему-то правильному пришел самостоятельно.
Спасибо за видео. Про первую ошибку даже не задумывался.

Grynya
Автор

1. А как тогда сделать передвижение объекта?

skelesheit
Автор

Звук стал намного лучше. Но эти оранжевые прямоугольнички...Очень отвлекают от кода) В следующий раз лучше не делать их динамичными. Спасибо за видео!

SK-eodt
Автор

так а как использовать transform если не в update если менять его постоянно собираемся ?

turalaliyev
Автор

Что правда, то правда: ошибки конечно и начинающих программистов, но этим самым начинающим программистам такие "сложные" вещи явно не требуются

qiweivaneevmaksim
Автор

Хотел бы уточнить, т.к. ребята по первому пункту путаются. Как я понял.
transform.SameMethod такая запись это аналог записи Т.е. вызов метода гетКомпонент идёт каждый кадр. Вместо этого гетКомпонент вызывается один раз на старте (или раньше) и дальше уже юзается ссылка соответствующего типа.

zpyfrrd
Автор

кеширование transform встроили еще в 2017 юню, так что можно спокойно к нему обращаться на прямую. Я сам не проверял, кому не лень потестируйте

Roman-
Автор

Не сказал бы что трансформы в апдейтах пускай даже каждый кадр едят там что-то сверхестественное) По оптимизации таких вещей впринципе даже можно недумать)
Игра даже на самом убогом телефоне ~за 2к рублей, нормально будет работать с трансформами в апдейте.. Смысл этой оптимизации 0))
Если ищете оптимизацию, лучше копайте в сторону шейдеров, там можно значительно оптимизировать игру, к примеру игра с неправильными шейдерами выдает 20 фпс, сделайте нужные вам шейдеры и получите 60-100 фпс из 20, вот это оптимизация) Лучше про такое пишите уроки)
Оптимизируйте модели, эффекты.

ivanshakhov
Автор

На счет 4 проблемы не понял - что она исправляет/решает? У нас так же есть дочерний объект с компонентом Text, поле которого вообще не меняется.

_nickname_nickname_
Автор

Что вместо трансформа тогда использовать?

timetimer
Автор

Ролик небольшой, но полезный, спасибо.

supin_dimas
Автор

Почти вовремя, аудио в финале, с голосом сработали)

multiplick
Автор

Годно, грешил сильно проверкой в update

kroniecraft
Автор

В 4ом пункте ButtonPrefab должен быть не GameObject в таком случае, а ItemPresenter и тогда произойдет магия и не нужно будет использовать после инстантиейта GetComponent...

sweeepeeee