Menu
CoddyTech

物体間の距離

CoddyのUnityジャーニー「Unityスクリプトの基礎」セクションの一部。レッスン 28/85。

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

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

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

チャレンジ

簡単

沼地では歩行者の速度を半分にします。

  1. float s = speed;の下に、if (Vector3.Distance(transform.position, swamp) < 3f)と書きます。
  2. その中で、s = speed / 2;を設定します。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;
    }
}

Unityスクリプトの基礎のすべてのレッスン

自分で練習してみよう: Unityプレイグラウンド