【Unity】Distanceメソッドとは?2つのオブジェクトの距離を計算する関数

Distanceメソッド Unity

こんにちは、ともくんのゲーム作り部屋にようこそ!

このページでは、

「UnityのDistanceメソッドってなに?」

「Distanceメソッドはどうやって使えばいいの?」

というお悩みの方に向けた内容となっています。

Unityで、2つのオブジェクトの間の距離を計算したい場合に、いくつか方法がありますが、その中の一つにDistanceメソッドを使う方法があります。

このDistanceメソッドとは、引数に2つのオブジェクトの座標をVector型で渡してあげることで、簡単にその座標間の距離を計算することができます。

ゲーム内で、オブジェクトの間の距離を取得して表示させたり、距離の近いオブジェクトがどれかを見つけたりするのにDistanceメソッドが使えます。

そこで、このページでは、Distanceメソッドがどういうものなのか、仕様や特徴、また使い方までをまとめていきます。

この記事を書いた人

ゲーム作りを学び始めた一児のパパです。
このブログは、子供から「ゲームを作ってみたい!」と言われ、非プログラマーでゲーム作りをしたことない僕が、ゲーム作りの本を読んで独学でゲーム開発を学んでいるブログです。
同じように初めてゲーム作りをしている方と一緒に学んでいけるようなブログに出来たらいいなと思っています。
また、「このコードはおかしい」とか「もっと良い書き方があるよ!」などあれば、どんどん指摘して頂けると助かります。

Distanceメソッドとは?オブジェクト間の距離を計算するメソッド

Distanceメソッドは、冒頭でも解説した通り、2つのオブジェクト間の距離を計算してくれる関数です。

もう少し具体的に言うと、オブジェクトにおける座標と座標の間の距離を計算するVectorクラスで定義されているメソッドです。

例えば、2DゲームでAとBというオブジェクトの間の距離を計算したい場合、数学的にいくと三角形を作り三平方の定理を使って、その距離を計算していくことになります。

しかし、このDistanceメソッドを使うことで、オブジェクトの座標を渡すだけで簡単に距離を計算することができます。

そのため、ゲーム内で2つのオブジェクトの距離を取得したい場合に、Distanceメソッドが使われます。

Distanceメソッドの使い方

ここからは、実際にDistanceメソッドを使うやり方をまとめていきます。

Vectorクラスを指定する(Vector2,Vector3)

Distanceメソッドを使う場合は、まずはVectorクラスを指定する必要があります。

これは、Distanceメソッドが座標や方向などを表すVectorクラスで定義されているメソッドになっているためです。

このVectorクラスは構造体によって分かれていて、2D(x,y)であれば「Vector2」、3D(x,y,z)であれば「Vector3」となり、それぞれ以下のように記述していきます。

引数に2つのオブジェクトの座標を渡す

Distanceメソッドの引数に、2つのオブジェクトの座標を渡してあげることで、その距離を計算してくれるようになっています。

この引数に渡す座標は、それぞれで指定したVector型の座標を渡してあげます。

例えば、3DゲームでAとBのオブジェクトの座標を取得したい場合は、以下のようにVector3型の変数を使ってスクリプトを書いてあげることで、座標間の距離が取得できます。

using UnityEngine;

public class Test : MonoBehaviour
{
    public GameObject objectA;  // オブジェクトAの変数
    public GameObject objectB;  // オブジェクトBの変数

    void Start()
    {
        Debug.Log(Vector3.Distance(objectA.transform.position, objectB.transform.position));    // AとBの距離を取得
    }
}

また、Distanceメソッドで計算されて返ってくる値は、float型になっています。

そのため、以下のように計算結果をfloat型の変数に代入してあげることもできます。

using UnityEngine;

public class Test : MonoBehaviour
{
    public GameObject objectA;  // オブジェクトAの変数
    public GameObject objectB;  // オブジェクトBの変数

    void Start()
    {
        float distance = Vector3.Distance(objectA.transform.position, objectB.transform.position);  // AとBの距離を代入
        Debug.Log(distance);    // AとBの距離を表示
    }
}

まとめ

このページでは、Unityで使うことができるDistanceメソッドについて、どんな仕組みになっているのか、また使い方までを紹介していきましたが、いかがでしたでしょうか?

Distanceメソッドは、オブジェクト間の座標の距離を計算して取得することができるメソッドです。

Distanceメソッドの引数に2つのオブジェクトの座標を入れてあげることで、三平方の定理を考えなくても簡単に距離が計算されます。

また、返ってくる値はfloat型になるので、その距離を元にさらに計算することもできます。

最後までお読みいただきまして、ありがとうございました!

コメント