Unity小技 指定した秒数で、オブジェクトを指定位置へ移動・回転する

Unity

説明

UnityのLerpとSlerp関数を使って、ゲームオブジェクトを指定した秒数で、指定位置へ移動・回転させる方法を紹介します。

環境

Unity 2020.1.1f1

作成

指定した秒数で、オブジェクトを指定位置へ移動・回転させるための、MoveTest.csを作成していきます。
・指定時間:10秒
・指定位置:Lerp関数で、移動前の位置から、xを+6だけ移動させる
・指定回転:Slerp関数で、移動前の回転角度から、y軸だけ180度回転させる

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

public class MoveTest : MonoBehaviour
{
    public GameObject gameObject;
    public float moveTime = 10.0f;  // 移動時間
    float elapsedTime = 0f;         // 経過時間
    float rate;                     // 割合

    // 位置
    Vector3 preposition;            // 移動前位置
    Vector3 postposition;           // 移動後位置

    // 回転
    Quaternion prerotation;         // 回転前角度
    Quaternion postrotation;        // 回転後角度

    bool isMoving = true;

    void Start()
    {
        Transform transform = gameObject.GetComponent<Transform>();

        preposition = transform.position;   // 移動前位置
        postposition = new Vector3(preposition.x + 6.0f, preposition.y, preposition.z);   // 移動後位置(xを6移動)

        prerotation = transform.localRotation;  // 回転前位置
        postrotation = Quaternion.Euler(prerotation.eulerAngles.x, prerotation.eulerAngles.y + 180f, prerotation.eulerAngles.z); // 回転後位置(y軸を180度回転)
    }

    void Update()
    {
        if (isMoving == false) return;

        // 経過時間を過ぎたときの処理
        if (elapsedTime >= moveTime) 
        {
            Debug.Log(elapsedTime);
            Debug.Log(moveTime);
            isMoving = false;
            return;
        }

        elapsedTime += Time.deltaTime;  // 経過時間の加算
        rate = Mathf.Clamp01(elapsedTime / moveTime);   // 割合計算

        // 移動・回転
        gameObject.transform.position =  Vector3.Lerp(preposition, postposition, rate);
        gameObject.transform.localRotation = Quaternion.Slerp(prerotation, postrotation, rate);

    }
}

※オブジェクトに上記のスクリプトをアタッチして、gameObjectに移動させたいオブジェクトをあててください。

Lerp関数は「線形補間」で、直線的な動きに使い、Slerpは「球面線形補間」で、球体など円を描きたいときに使うらしいです。

実行

実行すると、指定した時間(10秒)で、指定ポジションに移動・回転します。
以下のようになります。(例:Unityちゃんにスクリプトをはめてみた。)

以上です。

コメント

タイトルとURLをコピーしました