Как двигать объект в unity
Перейти к содержимому

Как двигать объект в unity

  • автор:

Позиционирование игровых объектов

Во время создания игры, вы должны разместить много различных объектов в вашем игровом мире.

Перемещение, вращение и масштабирование

Используйте инструменты трансформаций в панели инструментов для перемещения, вращения и масштабирования отдельных объектов. Каждый инструмент имеет соответствующее гизмо, которое появляется вокруг выделенного игрового объекта в окне Scene. Вы можете использовать мышь и манипулировать любой осью гизмо для изменения компонента Transform игрового объекта, или Вы можете ввести значения непосредственно в числовые поля компонента в инспекторе. Каждый из трех режимов может быть выбран горячими клавишами — W для перемещения, E для вращения и R для масштабирования.

Вы можете зажать и перетащить центр гизмо для перемещения объекта сразу по всем осям. В центре гизмо перемещения находятся три небольших квадрата, которые можно использовать для перемещения объекта вдоль одной плоскости (т.е. могут смещаться одновременно две оси, в то время как третья будет неподвижна). Если у вас есть третья кнопка мыши, вы можете нажать среднюю кнопку и перетащить курсор, чтобы работать с наиболее часто используемой осью (её стрелка изменится на жёлтую).

Если выбран инструмент вращения, вы можете менять поворот объекта зажав и перетаскивая оси гизмо каркасной сферы, отображаемого вокруг объекта. Так же как и с инструментом перемещения, последняя изменённая ось будет покрашена в жёлтый цвет и может быть в дальнейшем изменена кликом и перетаскиванием средней кнопкой мыши.

Инструмент масштабирования позволяет вам менять масштаб объекта равномерно по всем осям сразу с помощью нажатия и перетаскивания куба в центре гизмо. Вы также можете масштабировать оси по отдельности, но вам следует делать это с осторожностью, если у объекта есть дочерние объекты, т.к. эффект может выглядеть довольно странно. И вновь, последняя использованная ось будет подкрашена в жёлтый цвет и может быть использована тасканием средней кнопкой мыши.

Обратите внимание, что в режиме 2D, ось Z не может быть изменена в сцене с помощью гизмо. Тем не менее, бывает полезно использовать ось Z в некоторых методах скриптов для других целей; в таких случаях вы все еще можете установить ось Z в инспекторе.

Для получения дополнительной информации о трансформировании игровых объектов, см. страницу компонента Transform.

Переключатели отображения гизмо

Переключатели отображения гизмо( Gizmo Display Toggles ) используются для определения положения любого из них.

Переключатели отображения гизмо

  • Center установит гизмо в центре отображаемых границ объекта.
  • Pivot установит гизмо в позицию пивота Mesh’а.
  • Local установит гизмо для вращения объекта в локальных осях.
  • Global установит ориентацию гизмо по мировым осям.

Привязка к сетке

При перетаскивании любой оси гизмо инструмента перемещения, Вы можете зажать клавишу Control ( Command в Mac) для изменения значения с использованием привязки, определенной в Snap Settings .

Вы можете изменить шаг, который используется для привязки, выбрав в меню Edit->Snap Settings…

Настройки привязки к сетке в окна Scene.

Привязка к поверхности

При перетаскивании, с использованием центра инструмента перемещения, вы можете зажать Shift и Control ( Command в Mac) для привязки объекта к пересечению с любым коллайдером . Это позволяет очень быстро и точно расставлять объекты.

Вращение взгляда

При использовании инструмента вращения, вы можете зажать клавиши Shift и Control ( Command в Mac) для направления взгляда объекта на точку поверхности любого коллайдера . Это позволяет легко ориентировать объекты относительно друг друга.

Вершинная привязка

Вы можете строить миры еще быстрее с возможностью, которая называется “вершинная привязка”( Vertex snapping ). Эта возможность очень проста, но является очень мощным инструментом в Unity. Она позволяет вам взять один меш за любую вершину и с помощью мышки расположить его в такое же положение вершины другого меша, который вы выберите.

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

Использовать вершинную привязку в Unity достаточно просто. Просто следуйте этим шагам:

  • Выберите меш, которым вы хотите манипулировать, и убедитесь что Transform Tool активно.
  • Нажмите и держите клавишу V для активации режима вершинной привязки.
  • Поместите курсор мыши над вершиной, которую Вы хотите использовать.
  • Зажмите левую кнопку мыши когда курсор находится над нужной вершиной, и перетащите меш к любой другой вершине на другом меше.
  • Отпустите кнопку мыши и клавишу V когда результат вас устраивает.
  • Shift-V работает как переключатель этой функциональности.
  • Вы можете привязывать вершину к вершине, вершину к поверхности, и пивот к вершине.

Перемещение объекта

Правильно ли я понял, что 1 — это линейное перемещение, 2 — перемещение с постоянным ускорением, 3 — перемещение с плавным увеличением скорости и плавной остановкой?

Отслеживать
задан 15 мая 2019 в 3:51
Владимир Михайлов Владимир Михайлов
29 1 1 серебряный знак 5 5 бронзовых знаков

Точно не помню в чем отличие,но операция GetComponent очень затратная и лучше ее не использовать когда нужно часто обращаться к объекту,а только когда 1 раз,например в функции Start()

15 мая 2019 в 4:45
transform.translate плохой способ, он нарушает состояние физ. движка..
15 мая 2019 в 5:22

1) движение способом перерысовывания 2) Движения способом изменения вектора скорости 3) Движение способом применения силы к объекту (толкая)

15 мая 2019 в 6:19
@ВиталийШебаниц, что такое «способ перерисовывания»?
– user302909
15 мая 2019 в 11:54

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Чтобы лучше ориентироваться в вопросе, посмотрите следующие 2 вопроса:

  1. Правильная реализация передвижения персонажа
  2. Движение с коллизией через Update и FixedUpdate, что такое “телепортация” в контексте физического движка в Unity?

Теперь кратко по вашему вопросу:

  1. Translate() — перемещение персонажа с помощью простого изменения его координаты, точнее сдвига позиции объекта, относительно его текущего положение. Это скорее не линейное перемещение, а «телепортация» объекта, так как объект резко меняет свое положение в пространстве. Это не физический способ перемещения, то есть прибегать к такому методу стоит только тогда, когда вы не используете физику для перемещения объекта, иначе могут случаться проблемы с коллизиями объектов (например несмотря на правильно настроенные Rigidbody и Collider один объект может застрять в другом. Кроме того, использовать такое перемещение стоит только в методе Update() , а не FixedUpdate() . Чем меньшее значение вы передадите в качестве параметра, тем менее «отрывистым» и плавным будет выглядеть ваше перемещение (но по факту, все-равно останется телепортацией)
  2. Rigidbody2D.velocity — мгновенное изменение скорости физического объекта. Стоит применять с осторожностью, так как может приводить к физически нереалистичному поведению. В целом, при использовании физики в Unity скорость объекта будет вычисляться с учетом всех сил, которые действуют на физическое тело и массы физического объекта. По этому, если получится так, что физический движок посчитает за вас скорость объекта по всем силам, которые на него действуют, а затем вы измените ее руками, по средствам изменения Rigidbody2D.velocity — это может выглядеть неправильно. К этому методу стоит прибегать только в исключительных случаях, когда надо резко изменить движение объекта (сами Unity в документации приводят пример с прыжком персонажа). Стоит применять только в FixedUpdate() , и ни в коем случае не в Update() , а также избегать изменения позиции персонажа ( transform.Translate() и изменение transform.position )
  3. Rigidbody2D.AddForce() — добавить действие силы к объекту. Как уже писал в предыдущем пункте, физический движок вычисляет скорость и направление движения объекта опираясь на силы, которые действуют на объект, а также его массу. При этом способе «разгон» физического объекта будет более плавным. Если провести аналогию — применение этого способа — как будто вы толкнули физический объект в определенном направлении. Стоит применять только в FixedUpdate() , и ни в коем случае не в Update() , а также избегать изменения позиции персонажа ( transform.Translate() и изменение transform.position )

Как передвинуть объект в Unity 3D?

MrMureno

Если же вы про какой-то canvas элемент , то там ужу RectTransform и малость по другому, но тогда вам стоило б описать.

В любом случае стоило описать что за объект вы двигать собрались)

Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать

BasmanovDaniil

Даниил Басманов @BasmanovDaniil
Геймдизайнер-телепат

Все объекты на сцене двигаются одинаково — через изменение положения трансформа. Либо используете Transform.Translate, либо меняете Transform.position/Transform.localPosition напрямую. В 2d всё работает точно так же, просто не меняйте координату z, двигайте только в плоскости XY.

Перемещение объекта по нажатии кнопки в Unity3d на C#

Сегодня поговорим про движение объекта по нажатию кнопки на экране в Unity3D. Эта тема очень проста, но часто используется в разного рода играх.

Для начала давайте создадим пустой 3D проект. Открываем Unity, нажимаем кнопку в правом верхнем углу с надписью «New». В поле «Project name» указываем название проекта. В строке «Location» указываем расположение проекта на диске. Ниже поля «Location» ставим флажок «3D» и нажимаем «Create project».

image

Затем создаем куб который будет заменять нам землю (GameObject->3D Object->Cube). Потом сделаем его более плоским и растянем. Открываем окно «Inspector», выделяем наш куб, в параметре «Transform» пункт «Scale» задаем x:10, y:0.2, z:10. У нас должно получится такое полотно:

Теперь перемещаем камеру на координаты x:0,y:5,z:0. Затем поворачиваем ее на 90 градусов по оси x. Затем нам нужно создать объект который мы будем перемещать. Создаем сферу (GameObject->3D Object->Sphere), задаем параметр «Position» в «Transform» как x:0, y:1, z:0. После этого чтобы лучше видеть нашу сцену ищем на вкладке «Hierarchy» объект с именем «Directional Light» и задаем ему параметр «Rotation» в «Transform» как x:180, y:-30, z:0. Наш проект теперь должен выглядеть вот так:

Теперь нам нужна кнопка, по нажатию которой мы будем определять двигать ли наш объект. Сначала создаем экран на котором будет располагаться наша кнопка (GameObject->UI->Canvas). Следующий этап — создаем кнопку (GameObject->UI->Button). Затем надо написать скрипт для перемещения нашей сферы. В окне «Project» выбираем «Create», а там выбираем C# Script. Далее приведен код:

using System.Collections; using System.Collections.Generic; using UnityEngine; public class Move : MonoBehaviour < //Наш объект. public GameObject Sphere; //Целочисленная переменная определяющая дистанцию перемещения. public int S; //Метод который будет выполнятся по нажатию нашей кнопки. public void OnButtonDown() < //Задаем нашей переменной целочисленное значение 1 или 2. S = Random.Range(1, 2); //Перемещаем наш объект на S расстояние по оси x. Sphere.transform.Translate(S, 0, 0); >>

Сначала создаем переменную нашего объекта для перемещения. Вторая переменная — это расстояние на которое мы будем перемещать объект. Публичный метод «OnButtonDown» отвечает за перемещение при нажатии кнопки. Сначала задаем переменной S значение 1 или 2, после чего двигаем объект по оси X на S расстояние.

Затем выделяем нашу кнопку, в панели «Inspector» в самом низу нажимаем кнопку «Add Component», выбираем в «Scripts» наш код. Далее в компоненте «Button» снизу в пункте «On Click ()» нажимаем «+». Нажимаем на получившееся окно в параметре «On Click ()» в поле, где стоит «None (Object)». В нем выбираем нашу кнопку. Вот как это должно выглядеть:

Потом в нашем параметре «On Click ()» выбираем блок в котором стоит «No Function», внутри него выбираем название нашего кода, а в нем выбираем метод «OnButtonDown()». Теперь когда кнопка настроена переходим к коду. В окне «Inspector» должен отображаться компонент с названием нашего кода. В поле «Sphere» выбираем нашу сферу. Вот что должно получится:

Затем в окне «Game» нажимаем на «Maximize On Play». Теперь нажимаем на кнопку запуска игры. На экране отображается наша кнопка. Если кликнуть по ней, то наша сфера переместится по оси X.

Большое спасибо за прочтение публикации. Надеюсь, Вы приобрели для себя новые знания.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *