Rigidbody のついた物体は rigidbody.Addforce や rigidbody.velocity を利用して動かす事ができますが、移動方向と速さを指定するだけで指定の位置に動かす事ができません。
位置を動かすだけであれば transform.position を直接変更したり rigidbody.MovePosition で動かす事もできますが瞬間移動してしまいますね。
というわけで何かやり方ないか考えたりぐぐったりしてたら以下のスレッドを発見したので試してみた。
Move rigidbody to a specific position? - Unity Answers
コレを元にスクリプトを書いてみる。
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 で少しずつ動かすのとどっちが良いのだろう。
コメント