UnityでLerpを使って収縮運動や往復運動をさせる

目次

Lerpとは?

transform.localPosition = Vector3.Lerp(スタート地点の座標, 目的地の座標, 移動量);

と入力すると、スタート地点から目的地まで移動量ずつ移動します

transform.localScale = Vector3.Lerp(最初の大きさ, 収縮した後の大きさ, 加減量);

と入力すると、最初の大きさから指定した大きさまで、数値が変わります
こんな風にある値からある値まで変化させる時に使います
アニメーションと似たようなことができます

収縮運動をさせる

以下のスクリプトを入力して、収縮運動をさせたいオブジェクトにつけます

入力するスクリプト

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

public class Shrinkage : MonoBehaviour
{
    private float SizeTimer;// 大きくするか小さくするか判断する変数
    private float ShrinkageSpan = 2;// 収縮運動を実行する期間

    // Update is called once per frame
    void Update()
    {
        SizeTimer += Time.deltaTime;// SizeTimerを時間の経過分増加させる

        // オブジェクトを大きくする処理
        if (SizeTimer < ShrinkageSpan / 2)// もし、SizeTimerが実行期間の半分より小さいなら、
        {
            // Lerp(最初の値,変更後の値,変更するスピード)で最初の値から変更後の値まで変更するスピードで値を変更する
            transform.localScale = Vector3.Lerp(transform.localScale, new Vector3(4,4,4), 0.1f);// 大きさを4倍にする ※元の大きさが1,1,1の場合
        }

        // オブジェクトを小さくする処理
        if (SizeTimer >= ShrinkageSpan / 2 && SizeTimer < ShrinkageSpan)// もし、SizeTimerが実行期間の半分以上、かつ、実行期間より小さいなら、

        {
            this.transform.localScale = Vector3.Lerp(transform.localScale, new Vector3(2,2,2), 0.1f);// 大きさを元に戻す ※元の大きさが1,1,1の場合 
        }

        if (SizeTimer >= ShrinkageSpan)// もし、SizeTimerが実行期間以上になったら、
        {
            SizeTimer = 0;// SizeTimerを0にする
        }
    }
}

テストプレイをしてみると

一定間隔で収縮運動をします

往復運動をさせる

以下のスクリプトを入力して、往復運動をさせたいオブジェクトにつけます

入力するスクリプト

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

public class RoundTrip : MonoBehaviour
{
    private float MoveTimer;// どっちに移動するか判断する変数
    private float RoundTripSpan = 2;// 往復運動を実行する期間

    // Update is called once per frame
    void Update()
    {
        MoveTimer += Time.deltaTime;// MoveTimerを時間の経過分増加させる

        //右に移動する処理
        if (MoveTimer < RoundTripSpan / 2)// もし、MoveTimerが実行期間の半分より小さいなら、
        {
            // Lerp(最初の値,変更後の値,変更するスピード)で最初の値から変更後の値まで変更するスピードで値を変更する
            transform.localPosition = Vector3.Lerp(transform.localPosition, new Vector3(4, 4, 0), 0.1f);// 4,4,0に移動する ※元の大きさが0,0,0の場合
        }

        //左に移動する処理
        if (MoveTimer >= RoundTripSpan / 2 && MoveTimer < RoundTripSpan)// もし、MoveTimerが実行期間の半分以上、かつ、実行期間より小さいなら、

        {
            this.transform.localPosition = Vector3.Lerp(transform.localPosition, new Vector3(0, 0, 0), 0.1f);// 元の場所に戻す ※元の場所が0,0,0の場合
        }

        if (MoveTimer >= RoundTripSpan)// もし、MoveTimerが実行期間以上になったら、
        {
            MoveTimer = 0;// MoveTimerを0にする
        }
    }
}

テストプレイをしてみると

一定間隔で往復運動をします

これらで、動きのあるオブジェクトを作成して、ゲームを豊かにしてみてください♪

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

目次