7
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Unity】上下にゆらゆら動くアイテムボックスをつくる

Last updated at Posted at 2019-06-16
Unityでゲーム開発をしているときの あーこういうの欲しいな!を叶える、 知っていれば確実にゲームに彩りを加えられるメソッドを紹介します。

##PingPong関数
この記事で紹介するのは
ゲーム内によくある、上下にゆらゆら動いているアイテムボックスなどに使える
PingPong関数です。

Mathf.PingPong(時間, 上下差)
この関数では その名の通り、 0と「上下差」で指定した数値の間を、ピンポン球のように行ったり来たりする値を取得できます。
Mathf.PingPong(time.deltaTime, 10);

このようにすれば、0~10の値が返ってきます。

##アイテムボックスを動かす

上下に移動するアイテムボックスはy軸方向に動いているので
PingPong関数をy座標に使います。

まず、次のように書いてみます。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class itemBoxScript : MonoBehaviour { 

    public float nowPosi;

    void Start () {
        nowPosi = this.transform.position.y;
    }

    void Update () {
        transform.position = new Vector3(transform.position.x, nowPosi + Mathf.PingPong(Time.time, 0.3f), transform.position.z);
	}

}
再生開始と同時に最初のアイテムボックスのy座標(_nowPosi_)を取得しておきます。 でないと、Mathf.PingPongだけでは __(y座標) = 0 + (上下させたい値)__ になってしまうので、 オブジェクトをシーンビューでどのようにおこうとも 開始と同時にy=0の周辺で上下するようになってしまいます。 次に 取得したy座標にMathf.PingPongで上下させたい値を足します。

x座標、z座標には最初の座標をそのまま反映させましょう。



するとこんな感じ。

pingpongそのまま.gif

なんだか上下の動きが激しい気がするので
Mathf.PingPongのところを

Mathf.PingPong(Time.time/3, 0.3f)
このように変えてみると

pingpong:3.gif

ゆっくりになりました。

##まとめ

  • 再生開始時の座標を取得する
  • Mathf.PingPongはゆらゆら移動してほしい向きの座標に足す
上下に動くアイテムボックスが完成しました! ##参考 [Unityスクリプトリファレンス] (https://docs.unity3d.com/ja/2018.2/ScriptReference/Mathf.PingPong.html)
7
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?