Комментарии 25
Плюс в Update лучше оставить только проверку на нажатие кнопок, когда как само перемещение поместить в FixedUpdate для того, чтобы не надо было умножать на Time.DeltaTime.
1. Ригидбоди и движение трансформом — хлясь по рукам!
2. player = (GameObject)this.gameObject; — ШТА??
3. player.transform.position — где кеширование? (мусор и вызовы GC — привет!)
Какая плавность, вы чего?
Молчу уже про выравнивания и паблик переменные.
Мне нужно двигать объект и считать его коллизии. Например, у меня Tower Defence или клон Zuma. Мне нужно просто, с постоянной скоростью двигать объект из одной точки в другую.Но коллизию можно посчитать, только если есть ригидбоди.
Как именно вы предлагаете двигать объект, если не через трансформ? Вместо того, чтобы просто задать объекту новую точку, постоянно прикладывать и убирать силы?
Или через трансформ, но в Fixed Update?
Плюс, если уж совсем хочется, есть rigidbody.MovePosition. Это если ваш объект должен участвовать в симляции (читайте «толкать другие предметы). Но как я понял — это не ваш случай.
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.
Игра за час или убиваем время в Unity