はとの豆知識

Unityを中心に手っ取り早い機能の実装を紹介します。

【Unity】プレイヤー、オブジェクトをスムーズに移動させる方法 「transform.Translate」の紹介

プレイヤー、オブジェクトなど一定の速度で移動させたい時に使える「transform.Translate」についてまとめた記事です。

手っ取り早い実装方法

        private float moveSpeed = 30f;

        private void Update()
        {
            ///移動させる処理 引数は(移動する方向*移動する距離(速度)*Time.deltaTime)
            transform.Translate(Vector3.up * moveSpeed * Time.deltaTime);
        }

とりあえず動かしたいオブジェクトに付いているスクリプトにこれを書けば動きます。
(カクカクしているのはgifの設定によるものです)
f:id:HatoHatter:20210403023434g:plain

詳しい解説

上記のコードは指定した方向指定した距離 ローカル座標を基準にして
オブジェクトを移動させる処理です。
移動させたいオブジェクトをtransformの前に指定する事も可能です。
例) player.transform.Translate

指定した方向のVector3.upはベクトルで言うと(0.0, 1.0, 0.0)です。
直接ベクトルを書き込んでもいいのですが、Vector3.forward、Vector3.right、Vector3.zeroなど他にも簡略化してベクトルを宣言する機能があるので覚えておくと便利です。
Vector2.upと記述することも可能です。


指定した距離のmoveSpeedの値を変える事で移動速度を調整できます。
無くても移動するのですが、速度が調整できないというのは不便なので
こういった処理には移動速度を調整する変数を記述する事をおすすめします。


Time.deltaTimeは経過時間を返すプロパティです。
今回の内容とは関係が薄いので触れません。

ローカル座標ワールド座標

デフォルトでローカル座標を基準に移動するようになっており、
引数に Space.World を加えた場合ワールド座標を基準にして移動を行います。

        private float moveSpeed = 30f;

        private void Update()
        {
            ///移動させる処理 引数は(移動する方向*移動する距離(速度)*Time.deltaTime , ワールド座標を基準として移動させる)
            transform.Translate(Vector3.up * moveSpeed * Time.deltaTime, Space.World);
        }


よく分からないな~と思う方は、下記の2つような考えで
この処理に関しては問題ないと思います。

ローカル座標
「プレイヤーが向いている方向に前進させたいな~」と思ったら
Space.Worldは必要ありません。
回転させると進む方向が変わっていますね。
f:id:HatoHatter:20210403021942g:plain

ワールド座標
逆に「必ず決まった方向に進ませたいな~」と思ったら
Space.Worldを付けましょう。
回転させても進む方向は変わっていませんね。
f:id:HatoHatter:20210403022057g:plain

まとめ

今回はtransform.Translateの紹介でした。
オブジェクトの移動に便利な処理なので是非活用しましょう。
他にもオブジェクトを移動させる手段はあるので今後記載する予定です。

ブログを開設して初めての投稿になります。
Unityを中心に「こんなUnityの機能がありますよ~」とか「こんなゲームの仕組みを作ってみました~」みたいな感じの記事を書く予定です。
UE4もちょこちょこ触っているのでそのうち記事に纏められたらなと思っています。
初心者、学生の方々に分かりやすい記事を心掛けて頑張りますので
今後ともよろしくお願いします。