Unity

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

投稿日:2020年1月30日 更新日:

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にする
        }
    }
}

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

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

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

このサイトについて

ここには、自己紹介やサイトの紹介、あるいはクレジットの類を書くと良いでしょう。

検索

このサイトについて

ここには、自己紹介やサイトの紹介、あるいはクレジットの類を書くと良いでしょう。

検索

-Unity

執筆者:


comment

メールアドレスが公開されることはありません。

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

関連記事

no image

Unityのゲーム画面を動画にする【mac】

QuickTimePlayer を起動します MaximizeOnPlay をおして、▶ をおしてテストプレイを始めます QuickTimePlayer のアイコンをおしてファイルをおし …

no image

UnityRemoteで起動するスマホを指定する

スマホをPCに接続します Edit → ProjectSettings をおします Editor → Noneをおして、 iPhoneならiPhoneの機種、 androidなら Any androi …

no image

体力ゲージとダメージ処理

Create → UI → Slider とおします Sliderの中にあるHandle Slide Area を削除します Sliderを選択し、POSで位置を調整したり、Scaleで大きさを調整し …

UnityでGoogleMapを読み込み、表示させるとこから経路探索まで

はじめに Unityで現実世界の地図を表示するにはGoogleMapを使うのが便利です 大規模に使用しない限りは無料で使用できますが、登録のためにクレジットカードが必要になりますので、 必ず、用意して …

Unityでスマホ対応のVRを作ろう

今回やること VR空間の宝島を冒険して宝を探すゲームをUnityで作ります バージョンは2018でやっていますが恐らく他のバージョンでも問題ないと思います VR用のカメラを入れる UnityRemot …

ゲタバコ倶楽部へようこそ

  • 300735総閲覧数:
  • 18今日の閲覧数:
  • 231529総訪問者数:
  • 16今日の訪問者数:

住所
Akita,Japan

営業時間
月~日: 10:00 AM – 10:00 PM

このページはゲタバコ先生の日々思うことや活動、プログラミングの習得方法を発信するページです。
仕事のご依頼、メッセージ等、サービス概要をご覧の上で、お気軽にご連絡ください。

getabakosensei@gmail.com