Version: 2017.2
public void MovePosition (Vector2 position);

Parameters

position @param position Новая позиция для твердого тела.

Description

Передвигает твердое тело в позицию.

Передвигает твердое тело в указанную позицию путем расчета соответствующей скорости требуемой для передвижения твердого тела в эту позицию на протяжении следующего физического обновления. На протяжении движения, ни гравитация, ни линейное торможение не будет влиять на тело. Это связано с тем, что объект быстро движется из данной позиции через мир в указанную позицию.

Так как эта особенность позволяет твердому телу двигаться прямо к указанной позиции через мир, любые коллайдеры, прикрепленные к твердому телу будут реагировать как обычно, т.е. они будут обеспечивать коллизии и/или триггеры. Также это подразумевает что, если коллайдеры обеспечивают коллизии, то они будут оказывать влияние на движение твердого тела и на остановку его от достижения указанной позиции на протяжении следующего физического обновления. Если твердое тело кинематическое, то все коллизии не будут оказывать влияние на само твердое тело а только на другие динамические коллайдеры.

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.

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); } }