Menu
CoddyTech

物体間の距離

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

Vector3.Distance(a, b)は、3つすべての軸を通る直線で測った、2点間の距離を単位で表したものです。2点間の移動量の長さ、つまり(a - b).magnitudeなので、aとbの順序は関係ありません。(0, 0, 0)から(3, 0, 4)までの距離は5です。

距離を数値と比較すれば、スクリプトは何かが近くにあるかどうかを判断できます。このキャンパーは、キャンプファイヤーから4単位以内にいるときだけ手を温められます。キャンプファイヤーの位置はInspectorで設定します。

public Vector3 campfire = new Vector3(3, 0, 4);

void Update()
{
    float d = Vector3.Distance(transform.position, campfire);
    if (d < 4f && Input.GetKeyDown(KeyCode.Space))
    {
        Debug.Log("You warm your hands");
    }
}

距離には高さも含まれます。火の5単位上にいるキャンパーは、火から0単位ではなく5単位離れています。高さを考慮しない場合は、yが同じ2点を比較します。

challenge icon

チャレンジ

簡単

歩行者は沼地を横切ります。沼地の中心から3単位以内では、swamp(Inspectorで設定)を基準に、speedの半分の速度で移動します。それより離れると、通常の速度で移動します。移動コードは次のように記述します。各フレームで使用する速度を求め、speedフィールド自体は変更しないでください。

再生を押して沼地を通り抜け、次にチェックを押してください。

自分で試してみよう

using UnityEngine;

public class Walker : MonoBehaviour
{
    public float speed = 4f;
    public Vector3 swamp = new Vector3(0, 0.5f, 0);

    void Update()
    {
        float s = speed;
        // swamp から 3 ユニット以内では、速度を半分にして移動する。

        Vector3 direction = new Vector3(Input.GetAxisRaw("Horizontal"), 0, Input.GetAxisRaw("Vertical"));
        transform.position += direction.normalized * s * Time.deltaTime;
    }
}
quiz icon腕試し

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

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