position | @param position Новая позиция для твердого тела. |
Передвигает твердое тело в позицию.
Передвигает твердое тело в указанную позицию путем расчета соответствующей скорости требуемой для передвижения твердого тела в эту позицию на протяжении следующего физического обновления. На протяжении движения, ни гравитация, ни линейное торможение не будет влиять на тело. Это связано с тем, что объект быстро движется из данной позиции через мир в указанную позицию.
Так как эта особенность позволяет твердому телу двигаться прямо к указанной позиции через мир, любые коллайдеры, прикрепленные к твердому телу будут реагировать как обычно, т.е. они будут обеспечивать коллизии и/или триггеры. Также это подразумевает что, если коллайдеры обеспечивают коллизии, то они будут оказывать влияние на движение твердого тела и на остановку его от достижения указанной позиции на протяжении следующего физического обновления. Если твердое тело кинематическое, то все коллизии не будут оказывать влияние на само твердое тело а только на другие динамические коллайдеры.
2D твердые тела имеют фиксированный лимит на скорость движения, поэтому попытки двигаться на большие расстояния за короткие промежутки времени могу привести к тому, что твердое тело не достигнет указанной позиции на протяжении следующего физического обновления. Рекомендуется только для перемещений на относительно короткие дистанции.
Важно понимать, что фактическое изменение позиции будет происходить только во время следующего обновления физики, поэтому неоднократный вызов этого метода без ожидания следующего физического обновления приведет к использованию последнего вызова. Поэтому вызов рекомендуется делать в функции FixedUpdate.
var velocity: Vector2; var rb2D: Rigidbody2D;
function Start() { rb2D = GetComponent.<Rigidbody2D>(); }
function FixedUpdate () { rb2D.MovePosition(rb2D.position + velocity * Time.fixedDeltaTime); }
using UnityEngine; using System.Collections;
public class ExampleClass : MonoBehaviour { public Vector2 velocity; public Rigidbody2D rb2D; void Start() { rb2D = GetComponent<Rigidbody2D>(); } void FixedUpdate() { rb2D.MovePosition(rb2D.position + velocity * Time.fixedDeltaTime); } }