ぐうたら備忘録

Unityとか興味のあること色々。

Unityでオブジェクトの移動をする

オブジェクトの移動

フレーム単位での移動

Unityで一番最初に書く人も多いであろうオブジェクトの移動スクリプト
x方向に動かしたい場合について考えていこうと思う。
書くとしたらこんな感じだろうか?

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Move : MonoBehaviour {

  // 変化量
  public float dx;

    void Update() {
        // dxは任意の値
        this.transform.position += new Vector3(dx, 0, 0);
    }

}

これで毎フレーム(dx, 0, 0)の値だけ座標が加算されていく。
this.transform.positionはこのスクリプトが貼り付いてるオブジェクトの
座標(x, y, z)のこと。そこに変化量を加えていく感じ。

Update関数はフレーム毎更新だからFPS(1秒毎の画面の更新回数)の値次第で移動速度が変わって見えてしまう!
つまり処理が遅いと遅く移動しているように見える。処理が早いときはその逆。
できれば等速直線運動してほしいよね~?って人は次の項目へ。

時間単位での移動

等速直線運動の式は距離x、速さv、時間tとするとき
x = v * t
が成り立ってるのは既知だと思われる。
のしたのげおや、って覚えたよね?)

これをスクリプトにしたいとき、
x = オブジェクトの位置
v = 任意の速度
t = 経過時間
を設定してあげればいいな~ってことで

書こう。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Move : MonoBehaviour {
  
  // 変化量
  public float dx;

    void Update() {
        // dxは任意の値
        this.transform.position += new Vector3(dx * Time.deltaTime, 0, 0);
    }

}

Time.deltaTimeは1フレーム前からの経過時間を表してくれているから
変化量 * 時間の形にすることができた。
これで時間単位で移動してくれるようになる。

変化量dxの変更

変化量dxはpublicな変数だから、Inspector上からも数値を代入できる。
Moveスクリプトに表示されているdxに任意の値を入力したらそれが変化量になる。
f:id:gootalife:20170625183015p:plain

動かしてみる

動かしたいオブジェクトに作ったMoveスクリプトD&Dしてdxを入力したら再生してみる。
f:id:gootalife:20170625183448g:plain
ちゃんとx方向に動いてるぞ~。

最後に

今回は基本的な部分に触れたけど、これを組み合わせれば
音ゲーのノーツが移動する動きを表現できるし使うことは多々ありそう。

次はファイルの読み込みについて書こうかな~?