Pull to refresh

Comments 25

UFO just landed and posted this here
Похоже, именно в такой последовательности создавался Майнкрафт)
вместо изображений написано слово «image». автор пофикси
Движение куба в видео очень напомнило скринсейвер «Лабиринт»
Видео

Разве не лучше передвигать кубик с помощью Rigidbody ради избежания проблем с коллайдерами?
Плюс в Update лучше оставить только проверку на нажатие кнопок, когда как само перемещение поместить в FixedUpdate для того, чтобы не надо было умножать на Time.DeltaTime.

движение объектов в FixedUpdate? а вы, сударь, ломатель стереотипов.

UFO just landed and posted this here
Люто минусую!
1. Ригидбоди и движение трансформом — хлясь по рукам!
2. player = (GameObject)this.gameObject; — ШТА??
3. player.transform.position — где кеширование? (мусор и вызовы GC — привет!)

Какая плавность, вы чего?
Молчу уже про выравнивания и паблик переменные.
Ничего, что парень впервые в руки взял C# и unity? Естественно, от матёрого девелопера и даже джуниора я сам такое нахрен не приму. Но тут совсем молодняк. За конкретику — однозначно спасибо. Но минусовать какой смысл? Чем ему это поможет?
А какой смысл выкладывать в качестве пособия то, в чем сам некомпетентен? То что взял Юнити в руки — молодец. Но это не повод для статьи на хабре.
Хабр это сборник пособий?! Или место где делятся опытом? Ну вот такой его первый опыт.
Ну вот я считаю что этот опыт для других скорее вреден, чем полезен. А автор пускай сначала почитает хотя бы Мануал
А минусовать нужно для того, чтобы меньше людей читало подобные «туториалы». Их и в интернете полно, примерно такого же качества. Для того голосование за статью и введено, чтобы объективно выводить вверх то, что действительно интересно и полезно, и опускать вещи нулевой полезности.
Это для вас полезность статьи нулевая. А для любого новичка, который ещё ни разу такого не попробовал, она может быть полезной вполне. Хотя бы тем, что покажет: «Чувак, смотри… Ты тоже можешь! Хабр это не только место для снобов-профи, попробуй тоже — у тебя получится!»
А можете мне пояснить ваш пункт 1?
Конечно. Наличие ригидбоди указывает движку что объект подвержен воздействию физики. А это значит, что двигать его можно исключительно средствами физики и исключительно в FixedUpdate. Если вы делаете все вручную это заставляет физику делать перерасчеты всего и вся, из-за того что физические движок не понимает какого вообще происходит, и это дает приличные просадки производительности. Крмое того, на игроке еще и коллайдер висит без галочки isTrigger, а это значит что физика думает что этот коллайдер статичен (принадлежит к миру) и перерасчитывает ВСЕ готовые расчеты коллизий для статических коллайдеров. Все это написано в справке по юнити большими жирными буквами.
Насчет коллайдера я, кстати, неправ. Статический он был бы без ригидбоди, вот тогда бы его было очень больно двигать.
А что делать, если я не хочу двигать объект физикой?
Мне нужно двигать объект и считать его коллизии. Например, у меня Tower Defence или клон Zuma. Мне нужно просто, с постоянной скоростью двигать объект из одной точки в другую.Но коллизию можно посчитать, только если есть ригидбоди.
Как именно вы предлагаете двигать объект, если не через трансформ? Вместо того, чтобы просто задать объекту новую точку, постоянно прикладывать и убирать силы?
Или через трансформ, но в Fixed Update?
А вы не должны этого хотеть. Повесьте триггер и считайте события. Но сначала почитайте справку по коллайдерам и триггерам, потому что какой-то совсем детский вопрос задали.
Плюс, если уж совсем хочется, есть rigidbody.MovePosition. Это если ваш объект должен участвовать в симляции (читайте «толкать другие предметы). Но как я понял — это не ваш случай.
Добавлю — еще почитайте про Kinematic Rigidbody
player.transform.position — где кеширование? (мусор и вызовы GC — привет!)

in Unity5 we also cache the transform component on the c# side, so there should no longer be a performance reason to cache the transform component yourself.
Нашёл здесь: https://blogs.unity3d.com/2014/06/23/unity5-api-changes-automatic-script-updating/


Вот тут люди сравнили ручное кеширование с его отсутствием — разница незначительная.


Если transform выглядит как поле у gameObject, а position — как поле у transform, откуда новичку знать, что там что-то создаётся?


И вообще, этот код написан для примера — он должен быть максимально простым и коротким. Если в примере переменные вместо публичных станут приватными, а код разрастётся из-за выравнивания и стремления спасти GC от страшной напасти в виде 50 новых объектов в секунду, повысится ли его понятность?

Использование Input.GetAxis("Horizontal / Vertical") позволяет избежать проверок на нажатие клавиш Wasd.

Sign up to leave a comment.

Articles