どうも、チャーさんです。
あなたはUnityでオブジェクトを自動で上下移動させたい
と思っていますか?
オブジェクトを上下に自動で往復させたり、
動く床として上下に自動で往復させたり、
そんな風にしたいですよね。
この記事では、Unityでオブジェクトを自動で上下移動させる
方法を書いていますので、読めばあなたはUnityでオブジェクトを
上下に往復移動させることができます。
ですが、読まなければ、意外とどうしたらこの機能が
実現できるかわからないと悩むかもしれません。
そうなりたくなければ、このまま記事を読み進めてください。
動画はこちら
Unityでオブジェクトを上下移動(往復)させる機能の作り方
ということで早速結論です。
Unityでオブジェクトを上下に往復移動させたい場合は、
Mathf.Sin()関数を使いましょう。
これは高校で習う、三角関数のSin(サイン)ですが、
このメソッドは、
Mathf.Sin(Time.time)と書くことで、
−1から1までの数字を返してくれます。
なのでこのメソッドを使えば、オブジェクトを自動で
上下に移動させてかつ上下に往復させることができます。
ということで具体的には、以下のようなコードを書きましょう。
void Update()
{
transform.position = new Vector3(transform.position.x,Mathf.Sin(Time.time),transform.position.z);
}
こう書くことで、Unityでオブジェクトが上下に
往復移動してくれます。
ということでこれはどういうコードなのか
説明しますと、まず
transform.position はこのスクリプトをつけてるオブジェクト
の座標のことです。
そこにnew Vector3で新しく座標を代入して、
位置を更新し続けてます。
で先ほど紹介した、Mathf.Sin(Time.time)は-1から1
までの数字を少数で返してくるので、
y軸の値が常に-1から1までの間で増減して、
オブジェクトが上下に移動して往復してくれるわけです。
ということで一度上記のコードを書いて
実行してみてください。
するとオブジェクトが上下にゆらゆら動きます。
オブジェクトを現在位置で上下に移動させる方法
で次にこのままだと、オブジェクトは常に1から-1の
間で動くことになります。
Scene上でオブジェクトを例えばy軸の8に設定しても
1~-1のとこに座標が強制移動させられてしまいます。
ですがそれだと困りますよね。
ということで現在位置で上下移動させたいって場合は
以下のコードを書きましょう。
すると現在の位置で上下に移動してくれるようになります。
これも一応補足すると、やってることとしては、
現在のy軸座標にMathf.Sin()で出てくる、1~-1を足してる
だけです。
例えば、現在のオブジェクトのy座標が8だとしたら、
そこに-1から1を足すので、7~9の間で、
オブジェクトが上下移動してくれるわけです。
で、オブジェクトの現在y座標を示してるのが、
startPos.yの部分でして、そこにMathf.Sin(Time.time)を
足したものをposYという変数に代入して、
transform.position = new Vector3(transform.position.x,posY,transform.position.z);
y軸の部分に代入してやることで、現在y座標から-1から1を足した
数値で上下するわけです。
またあとはMathfメソッドで出てくる数値に数字を
掛け算すると、
Mathf.Sin(Time.time)*4;
(こんな感じに)
上下異動幅を大きくすることもできるので
ぜひやってみてください。
まとめ
ということでまとめに入ります。
Unityでオブジェクトを上下移動させたい場合は、
Mathf.Sin(Time.time)
を使いましょう。
そしてそれをy座標の部分に入れて、
y座標の値を増減させて、上下移動を実現しましょう。
ということで、Unityでオブジェクトを上下移動させる方法でした。
読んでいただいてありがとうございました。
でわ。
チャーさん