Rigidbody2D.MovePosition
Declaration
public void MovePosition(Vector2 position);Параметры
| Параметр | Описание |
|---|---|
| должность | Новое положение объекта Rigidbody. |
Описание
Перемещает rigidbody в position.
Перемещает жесткое тело к указанному position путем вычисления соответствующей линейной скорости, необходимой для перемещения жесткого тела в эту позицию во время следующего обновления физики. Во время перемещения ни гравитация, ни linearDamping не будут влиять на тело. Это приводит к тому, что объект быстро перемещается из существующего положения, через мир, к указанному position.
Поскольку эта функция позволяет жесткому телу быстро перемещаться к указанному position через мир, любые коллайдеры, прикрепленные к жесткому телу, будут реагировать как ожидалось i.e. Они будут производить столкновения и/или триггеры. Это также означает, что если коллайдеры произведут столкновение, то это повлияет на движение жесткого тела и потенциально остановит его от достижения указанного position во время следующего обновления физики. Если жесткое тело кинематическое, то любые столкновения не повлияют на само жесткое тело и повлияют только на любые другие динамические коллайдеры.
2D жесткие тела имеют фиксированный предел скорости, с которой они могут перемещаться, поэтому попытки перемещения на большие расстояния за короткие временные шкалы могут привести к тому, что жесткое тело не достигнет указанного position во время следующего обновления физики. Рекомендуется использовать эту функцию только для относительно небольших перемещений.
Важно понимать, что фактическое изменение положения произойдет только во время следующего обновления физики, поэтому повторный вызов этого метода без ожидания следующего обновления физики приведет к использованию последнего вызова. По этой причине рекомендуется вызывать его во время обратного вызова FixedUpdate.
Примечание: MovePosition предназначен для использования с кинематическими жесткими телами.
// Move sprite bottom left to upper right. It does not stop moving. // The Rigidbody2D gives the position for the cube.
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); } }