Menu
CoddyTech

点に向かって移動する

CoddyのUnityジャーニー「Unityスクリプティングの基礎」セクションの一部。レッスン 27/67。

Vector3.MoveTowards(current, target, maxStep)は、targetに最大maxStepだけ近づいた点を返します。ターゲットがそれより近い場合はターゲット自体を返すため、行き過ぎることはありません。ステップにspeed * Time.deltaTimeを使うと、オブジェクトは一定の速度で移動し、ターゲット上で正確に停止します。このケーブルカーは毎秒2単位の速度で駅まで滑らかに進みます。

public Vector3 station = new Vector3(6, 3, 0);
public float speed = 2f;

void Update()
{
    transform.position = Vector3.MoveTowards(transform.position, station, speed * Time.deltaTime);
}

到着すると、それ以降の呼び出しは毎回stationを返すため、車両はその場にとどまり、transform.position == stationはtrueになります。単一の数値には、Mathf.MoveTowardsが同じように機能します。

Vector3.Lerp(a, b, t)は、aからbまでの道のりのうち、割合tの位置にある点です。t = 0.5なら中間点です。Update()内でLerp(transform.position, station, 2f * Time.deltaTime)と書くと、各フレームで残りの距離の一部だけ進みます。最初は速く、終わりに近づくほど遅くなり、一定の速度で到着するのではなく、少しずつ近づいていきます。オブジェクトを一定の速度で移動させて正確に停止させる必要がある場合はMoveTowardsを使い、緩やかに減速させるにはこのLerpのパターンを使いましょう。

challenge icon

チャレンジ

中級

ドローンは、Spaceを押すまで空中で待機します。押すと、pad(着陸パッドの位置)まで、1秒あたりspeed単位の速度で一直線に飛行し、正確に着陸します。着陸すると、毎フレーム繰り返すのではなく、1回だけLandedをログに出力します。

Playを押し、Spaceを押してから、Checkを押してください。

自分で試してみよう

using UnityEngine;

public class Drone : MonoBehaviour
{
    public Vector3 pad = new Vector3(0, 0.25f, 0);
    public float speed = 2f;

    void Update()
    {
        // Spaceを押した後、speedでpadに向かって飛び、到着時にLandedを一度だけログに記録する
    }
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

Unityスクリプティングの基礎のすべてのレッスン