position | @param position Новая позиция для твердого тела. |
Передвигает твердое тело в позицию.
Передвигает твердое тело в указанную позицию путем расчета соответствующей скорости требуемой для передвижения твердого тела в эту позицию на протяжении следующего физического обновления. На протяжении движения, ни гравитация, ни линейное торможение не будет влиять на тело. Это связано с тем, что объект быстро движется из данной позиции через мир в указанную позицию.
Так как эта особенность позволяет твердому телу двигаться прямо к указанной позиции через мир, любые коллайдеры, прикрепленные к твердому телу будут реагировать как обычно, т.е. они будут обеспечивать коллизии и/или триггеры. Также это подразумевает что, если коллайдеры обеспечивают коллизии, то они будут оказывать влияние на движение твердого тела и на остановку его от достижения указанной позиции на протяжении следующего физического обновления. Если твердое тело кинематическое, то все коллизии не будут оказывать влияние на само твердое тело а только на другие динамические коллайдеры.
2D твердые тела имеют фиксированный лимит на скорость движения, поэтому попытки двигаться на большие расстояния за короткие промежутки времени могу привести к тому, что твердое тело не достигнет указанной позиции на протяжении следующего физического обновления. Рекомендуется только для перемещений на относительно короткие дистанции.
It is important to understand that the actual position change will only occur during the next
physics update therefore calling this method repeatedly without waiting for the next physics
update will result in the last call being used. For this reason, it is recommended that it
is called during the FixedUpdate callback.
Note: MovePosition is intended for use with kinematic rigidbodies.
// 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); } }