Version: 2019.3
public void MovePosition (Vector2 position);

パラメーター

positionリジッドボディオブジェクトの新しい位置。

説明

Rigidbody オブジェクトを指定する位置へ移動します

リジッドボディを次の物理更新の間に position に移動させるのに必要な直線速度を計算することで、リジッドボディを指定した位置に移動させます。移動中は重力も線形抵抗も影響しません。これによりオブジェクトは空間上を既存位置から指定した position へと速やかに移動できます。

この要素はリジッドボディを指定した position に空間を通して素早く移動させることができるので、リジッドボディにアタッチされたどのようなコライダーも期待通りに反応します。つまり、衝突判定とトリガー判定が発生します。また、コライダーが衝突判定を発生させればリジッドボディの移動に影響し、次の物理更新の間は指定した position に到達するのを潜在的に止めます。リジッドボディが IsKinematic を指定されている場合、すべての衝突判定はリジッドボディ自身に影響せず、他の動的なコライダーにのみ影響します。

2D リジッドボディには移動速度について固定制限があります。そのため短すぎるタイムスケールで長距離を移動しようとすれば、次の物理更新の間にリジッドボディが指定した position に移動できない可能性があります。相対的に少ない距離の移動のみを推奨しています。

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); } }
Copyright © 2023 Unity Technologies
优美缔软件(上海)有限公司 版权所有
"Unity"、Unity 徽标及其他 Unity 商标是 Unity Technologies 或其附属机构在美国及其他地区的商标或注册商标。其他名称或品牌是其各自所有者的商标。
公安部备案号:
31010902002961