Параметры
position | Новая позиция для объекта Rigidbody. |
Описание
Перемещает твердое тело в position
.
Перемещает твердое тело в указанное position
, вычисляя соответствующую линейную скорость, необходимую для перемещения твердого тела в это положение во время следующего обновления физики. Во время движения ни гравитация, ни линейное сопротивление не будут влиять на тело. Это заставляет объект быстро перемещаться из существующей позиции в мире в указанную position
.
Поскольку эта функция позволяет быстро перемещать твердое тело в указанную position
по миру, любые коллайдеры, прикрепленные к твердому телу, будут реагировать ожидаемым образом, т. е. будут создавать столкновения и/ или триггеры. Это также означает, что если коллайдеры произведут столкновение, это повлияет на движение твердого тела и потенциально помешает ему достичь указанной position
во время следующего обновления физики. Если твердое тело кинематическое, то любые столкновения не повлияют на само твердое тело, а повлияют только на любые другие динамические коллайдеры.
Двумерные твердые тела имеют фиксированный предел скорости, с которой они могут двигаться, поэтому попытка перемещения на большие расстояния за короткие промежутки времени может привести к тому, что твердое тело не достигнет указанной position
во время следующее обновление физики. Рекомендуется использовать это только для перемещений на относительно небольшие расстояния.
Важно понимать, что фактическое изменение положения произойдет только во время следующего обновления физики, поэтому повторный вызов этого метода без ожидания следующего обновления физики приведет к использованию последнего вызова. По этой причине рекомендуется вызывать его во время обратного вызова FixedUpdate.
Примечание.MovePosition предназначен для использования с кинематическими твердыми телами.
// Переместить спрайт снизу слева вверх справа. Он не перестает двигаться.
// Rigidbody2D указывает положение куба.
using UnityEngine;
using System.Collections;
public class Example : MonoBehaviour
{
public Texture2D tex;
private Vector2 velocity;
private Rigidbody2D rb2D;
private Sprite mySprite;
private SpriteRenderer sr;
void Awake()
{
sr = gameObject.AddComponent<SpriteRenderer>();
rb2D = gameObject.AddComponent<Rigidbody2D>();
}
void Start()
{
mySprite = Sprite.Create(tex, new Rect(0.0f, 0.0f, tex.width, tex.height), new Vector2(0.5f, 0.5f), 100.0f);
velocity = new Vector2(1.75f, 1.1f);
sr.color = new Color(0.9f, 0.9f, 0.0f, 1.0f);
transform.position = new Vector3(-2.0f, -2.0f, 0.0f);
sr.sprite = mySprite;
}
void FixedUpdate()
{
rb2D.MovePosition(rb2D.position + velocity * Time.fixedDeltaTime);
}
}