Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.


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スクリプトリファレンス

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away