物体間の距離
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点を比較します。
チャレンジ
簡単沼地では歩行者の速度を半分にします。
float s = speed;の下に、if (Vector3.Distance(transform.position, swamp) < 3f)と書きます。- その中で、
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プレイグラウンド