В Unity есть много способов перемещать объект. В чем различие между этими подходами?
transform.Translate(0, 0, speed * Time.deltaTime);
GetComponent<Rigidbody2D>().velocity = new Vector2(0, v);
GetComponent<Rigidbody2D>().AddForce(0, 0);
Правильно ли я понял, что 1 - это линейное перемещение, 2 - перемещение с постоянным ускорением, 3 - перемещение с плавным увеличением скорости и плавной остановкой?
Чтобы лучше ориентироваться в вопросе, посмотрите следующие 2 вопроса:
Теперь кратко по вашему вопросу:
Translate()
- перемещение персонажа с помощью простого изменения его координаты, точнее сдвига позиции объекта, относительно его текущего положение. Это скорее не линейное перемещение, а "телепортация" объекта, так как объект резко меняет свое положение в пространстве. Это не физический способ перемещения, то есть прибегать к такому методу стоит только тогда, когда вы не используете физику для перемещения объекта, иначе могут случаться проблемы с коллизиями объектов (например несмотря на правильно настроенные Rigidbody
и Collider
один объект может застрять в другом. Кроме того, использовать такое перемещение стоит только в методе Update()
, а не FixedUpdate()
. Чем меньшее значение вы передадите в качестве параметра, тем менее "отрывистым" и плавным будет выглядеть ваше перемещение (но по факту, все-равно останется телепортацией)Rigidbody2D.velocity
- мгновенное изменение скорости физического объекта. Стоит применять с осторожностью, так как может приводить к физически нереалистичному поведению. В целом, при использовании физики в Unity скорость объекта будет вычисляться с учетом всех сил, которые действуют на физическое тело и массы физического объекта. По этому, если получится так, что физический движок посчитает за вас скорость объекта по всем силам, которые на него действуют, а затем вы измените ее руками, по средствам изменения Rigidbody2D.velocity
- это может выглядеть неправильно. К этому методу стоит прибегать только в исключительных случаях, когда надо резко изменить движение объекта (сами Unity в документации приводят пример с прыжком персонажа). Стоит применять только в FixedUpdate()
, и ни в коем случае не в Update()
, а также избегать изменения позиции персонажа (transform.Translate()
и изменение transform.position
)Rigidbody2D.AddForce()
- добавить действие силы к объекту. Как уже писал в предыдущем пункте, физический движок вычисляет скорость и направление движения объекта опираясь на силы, которые действуют на объект, а также его массу. При этом способе "разгон" физического объекта будет более плавным. Если провести аналогию - применение этого способа - как будто вы толкнули физический объект в определенном направлении. Стоит применять только в FixedUpdate()
, и ни в коем случае не в Update()
, а также избегать изменения позиции персонажа (transform.Translate()
и изменение transform.position
)Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Не добавляется foreing keyПроверил столбцы на null,таблицы пустые,типы подходят,длина тоже Уже не знаю что делать,завтра курсовая
На хостинге(cpanel) в диспетчере почему-то отсутствует файл error log, можно как-то настроить его отображение? добавление в начале проблемного скрипта...