Твердые тела и скорости / Физика
Единственный раз, когда я лично использовал систему hardbodys, был при реализации моих собственных boids (поведение флокирования), как вам нужночтобы вычислить несколько отдельных векторов и применить их все к юниту.
Rigidbody.MovePosition(m_Rigidbody.position + movement);
Это вычисляет вектор движения к цели, используя физическую систему, так что скорость и движение объекта все еще могут зависеть от перетаскивания., угловое сопротивление и так далее.
Эта конкретная функция является оберткой вокруг Rigidbody.AddForce
Я полагаю.
Плюсы:
- Хорошо, если вам нужны реалистичные физические реакции
Минусы:
Немного громоздко использовать, если все, чего вы пытаетесь достичь, это перемещение объекта из точки А в точку Б.
- Иногда неправильная настройка, установленная где-то слишком высоко (например: Масса> 10000000), может привести к очень странным ошибкам в поведении, которые могут быть довольно трудной задачей для определения и смягчения.
Примечания: Твердые тела при столкновении с другим твердым телом будут отскакивать друг от друга в зависимости от настроек физики.
На них также влияет гравитация.По сути, они пытаются имитировать объекты реальной жизни, но иногда бывает трудно приручить объекты и заставить их делать именно то, что вы хотите.
И Rigidbody.AddForce
в основном такие же, как указано выше, за исключением того, что вы сами вычисляете вектор.
Так, например, чтобы получить вектор к цели, вы бы сделали
Vector3 target = target.position - myPosition;
Rigidbody.AddForce(target * 15 * Time.deltaTime, 0, 0, ForceMode.VelocityChange);
Если вы не планируете использовать в своей игре какую-либо основную физическую механику, я бы предложил двигаться путем интерполяции.положение объектов.
Так как гораздо проще заставить вещи вести себя так, как вы хотите, если, конечно, вы не стремитесь к физическому реализму!
Интерполяция позиции единиц
Плюсы:
- Возможно, поначалу немного странно понять, но гораздо проще заставить объекты двигаться так, как вы хотите
Минусы:
- Если вы хотите реалистичной реакции на объекты, влияющие на вас, вам придется выполнять большую часть работы самостоятельно.Но иногда это предпочтительнее, чем использовать физическую систему, а затем пытаться, как я уже говорил, приручить ее.
Вы могли бы использовать эту технику, скажем, в игре Pokemon, вы не останавливаетесь в Pokemon и не ждете, пока пепел прекратит скользить или ударит стену и неудержимо подпрыгнет назад.
Thisопределенная функция устанавливает положение объектов, например, телепортирование, но вы также можете использовать это для плавного перемещения персонажа в позицию.Я предлагаю поискать «анимацию» для плавной интерполяции между переменными.
//change the characters x by + 1 every tick,
Transform.transform.position.x += 1f;