Rigidbody 付き物体を物理挙動で指定の位置に移動する

シェアする

Rigidbody のついた物体は rigidbody.Addforce や rigidbody.velocity を利用して動かす事ができますが、移動方向と速さを指定するだけで指定の位置に動かす事ができません。

位置を動かすだけであれば transform.position を直接変更したり rigidbody.MovePosition で動かす事もできますが瞬間移動してしまいますね。

というわけで何かやり方ないか考えたりぐぐったりしてたら以下のスレッドを発見したので試してみた。

コレを元にスクリプトを書いてみる。

public class Block : MonoBehaviour {

    public Vector3 target = Vector3.zero;
    public float speed = 4.0f;

    void Start() {
        StartCoroutine(MoveBlock());
    }

    IEnumerator MoveBlock() {
        float lastSqrMgr = Mathf.Infinity;
        Vector3 desiredVelocity = (target - transform.position).normalized * speed;

        float sqrMag = 0f;
        while (true) {
            sqrMag = (target - transform.position).sqrMagnitude;
            if (sqrMag > lastSqrMgr) {
                desiredVelocity = Vector3.zero;
            }
            lastSqrMgr = sqrMag;
            rigidbody.velocity = desiredVelocity;
            
            yield return 0;
        }
    }
}

target の位置に rigidbody.velocity を利用して動いていきます。

試してないけど rigidbody.MovePosition で少しずつ動かすのとどっちが良いのだろう。

Sponsored Link

シェアする

フォローする