【Unity】オブジェクトを移動させる方法まとめ「Translate, Rigidbody, Vector3」

投稿者: | 2018年11月8日
フィア
カレン…、オブジェクトを移動させたいんだけど、

いろいろやり方があって、どれ使えばいいか分からなくなっちゃった…

カレン
確かにいろいろあるわね…
カレン
まぁ、動いたらなんでもいいから、

どれ使ってもいいんだけどね

フィア
整理するためにも、とりあえずまとめてみるよー
カレン
フィアが珍しくやる気だ…

 

スポンサーリンク

 

transformを使った移動

・transform.Translate

これは、現在のオブジェクトの位置を基準にして移動したいときに使用します。

GameObject.Find(“Object”).gameObject.transform.Translate(x, y, z); のような使い方をします。スクリプトを直接オブジェクトに取り付けた場合、GameObject.Find(“Object”).gameObject は省略できます。これは以下全て同様です。

なお、GameObject.Find(“Object”)は比較的CPUへの負荷が大きいので、移動のようにUpdateで何度も繰り返す場合はオブジェクトに直接取り付けた方がいいでしょう。

また、このコードでは斜め移動が可能ですが、if をelse if にすると、上下左右いずれかの移動になります。

 

 

・transform.position

オブジェクトの座標を指定して移動します。本来は transform.position = new Vector3(0f, 0f, 0f); のような使い方で指定した場所へワープさせたいときに使用することが多いです。

今回のように現在の座標に加算すればtransform.Translateと同じような移動も可能です。

transform.position += transform.forward * 1f * Time.deltaTime; のように使います。

transform.forward はオブジェクトが向いている方向のベクトル、1f * Time.deltaTimeは1 m/s の速さで処理を行うことを示しています。

 

Vector3を使った移動

・Vector3.MoveTowards

指定した座標に向かって移動したいときに使います。ターゲットを追いかけたいときに使用することが多いです。

 

Vector3についてさらに詳しく知りたい方はこちらの記事もご覧ください

 

Rigidbodyを使った移動

・Rigidbody.AddForce

オブジェクトに物理的な力を加えて移動させます。Cube に Rigidbody コンポーネントを取り付け、物理演算や加速度を利用したいときに使います。

これまではInput.GetKey で bool 型の trueを取得し、実行していましたが、

Input.GetAxis(“Vertical”) を使って float の値を取得しています。値の範囲は -1 ~ 1 です。

今回の場合、AddForce(x, 0, z) で x軸方向にInput.GetAxis(“Horizontal”) * speed、z軸方向にInput.GetAxis(“Vertical”) * speedの力を加えます。

FixedUpdate() はRigidbodyを使う際によく用いられます。Update() はパソコンの性能によって処理間隔が異なりますが、FixedUpdate() は性能に関わらず一定となります。

もしFixedUpdate()  を使わないと、Addforceする間隔が機械によって異なるため、移動速度が変化してしまいます。

 

 

総評

フィア
ふ~っ、まとめ終わったよー
カレン
フィアが珍しく仕事した…えらいえらい
フィア
わ、私だってたまには仕事するよ!? 分かるときだけ…
カレン
まぁ、これ以外にも移動する方法はあるんだけど、

基本的にはこれだけ知ってれば十分だわ

フィア
私の功績を称えて、是非使ってみてね!

 

「忙しい人のためのUnity入門講座」を始めました!!

入門書レベルの記事をそろえていますので、初心者の方は是非ごらんください。

 

ホームへ戻る

 

すくまりゲームズの人気記事