position | 刚体对象的新的位置。 |
将刚体移动到 position
。
通过计算在下一个物理更新期间将刚体移动到该位置所需的适当线性速度,将刚体移动到指定的 position
。在移动过程中,重力或 linearDamping 不会影响刚体。这会导致物体从现有位置快速移动,穿过世界,到达指定的 position
。
因为此功能允许刚体快速移动到指定的 position
穿过世界,因此附加到刚体的任何碰撞体将按预期做出反应,即它们将产生碰撞和/或触发器。这也意味着,如果碰撞体产生碰撞,那么它将影响刚体的运动,并可能阻止它在下一个物理更新期间到达指定的 position
。如果刚体是运动学刚体,那么任何碰撞都不会影响刚体本身,只会影响任何其他动态碰撞体。
二维刚体对移动速度有一个固定的限制,因此尝试在短时间内移动较长距离会导致刚体在下一个物理更新期间无法到达指定的 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); } }