スポンサーリンク
スポンサーリンク
UnityUnityメモ

Unity二つのオブジェクト間の距離を取得する

Unity

こんにちは!今日はUnityでSphere(球体)とCube(立方体)の間の距離を取得して、その結果をコンソールに表示する方法について説明します。

球体と立方体をシーンに配置

  1. ヒエラルキー(Hierarchy)ウィンドウで右クリックします。
  2. 「3D Object」 -> 「Sphere」 を選択して球体を作成します。
  3. 同様に、再度右クリックして 「3D Object」 -> 「Cube」 を選択して立方体を作成します。

スクリプトの作成

次に、距離を計算してコンソールに表示するスクリプトを作成します。

  1. 「Assets」フォルダ内で右クリックして 「Create」 -> 「C# Script」 を選びます。
  2. スクリプトに「DistanceCalculator」という名前を付けます。

スクリプトの編集

スクリプトをダブルクリックして開き、以下のコードを入力します。

コード全体の説明

このスクリプトは「DistanceCalculator」という名前のクラスを持っています。これはMonoBehaviourを継承しており、Unityのゲームオブジェクトにアタッチすることで動作します。スクリプトの目的は以下の二つです:

  1. 他のオブジェクト(この場合は「cube」)との距離を計算して表示する。
  2. プレイヤーが十字キーを使ってオブジェクトを移動させる。

では、各部分の説明に進みましょう。

各部分の説明

usingディレクティブ

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

これらはUnityでスクリプトを動かすために必要なライブラリをインポートしています。

クラス宣言とフィールド

public class DistanceCalculator : MonoBehaviour
{
    [SerializeField] GameObject cube;

DistanceCalculatorというクラスが定義されており、MonoBehaviourを継承しています。[SerializeField]属性を使って、インスペクターで設定できるGameObject型のcubeというフィールドを定義しています。

Updateメソッド

void Update()
{
    float dis = Vector3.Distance(this.transform.position, cube.transform.position);
    Debug.Log("距離 : " + dis);

Updateメソッドは毎フレーム呼び出されます。まず、Vector3.Distanceメソッドを使って、このスクリプトがアタッチされたオブジェクトの位置とcubeオブジェクトの位置との距離を計算し、その結果をdisという変数に保存します。そして、その距離をコンソールに表示します。

    //十字キー操作
    float moveX = Input.GetAxis("Horizontal") * Time.deltaTime * 3;
    float moveZ = Input.GetAxis("Vertical") * Time.deltaTime * 3;
    transform.position = new Vector3(
    transform.position.x + moveX, transform.position.y, transform.position.z + moveZ
    );
}

次に、十字キーの入力を取得してオブジェクトを移動させる部分です。Input.GetAxis("Horizontal")は左右の入力を取得し、Input.GetAxis("Vertical")は前後の入力を取得します。これらにTime.deltaTime(前フレームからの経過時間)を掛け、移動速度を調整するためにさらに3を掛けています。そして、新しい位置を計算してオブジェクトの位置を更新しています。

全体の動き

  1. 毎フレーム、このスクリプトがアタッチされたオブジェクトとcubeオブジェクトの距離が計算され、コンソールに表示されます。
  2. プレイヤーが十字キーを押すと、その入力に基づいてオブジェクトが移動します。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class DistanceCalculator : MonoBehaviour
{
    [SerializeField] GameObject cube;

    void Update()
    {
        float dis = Vector3.Distance(this.transform.position, cube.transform.position);
        Debug.Log("距離 : " + dis);

        //十字キー操作
        float moveX = Input.GetAxis("Horizontal") * Time.deltaTime * 3;
        float moveZ = Input.GetAxis("Vertical") * Time.deltaTime * 3;
        transform.position = new Vector3(
        transform.position.x + moveX, transform.position.y, transform.position.z + moveZ
        );
    }
}

スクリプトをオブジェクトにアタッチ

  1. 作成した「DistanceCalculator」スクリプトを ヒエラルキー(Hierarchy)ウィンドウにあるSphereオブジェクトにドラッグ&ドロップします。
  2. アタッチしたオブジェクトを選択し、 インスペクター(Inspector)ウィンドウで「Cube」のフィールドにオブジェクトをドラッグ&ドロップして割り当てます。

実行して確認

ゲームを実行すると、コンソールに球体と立方体の距離が表示されるはずです。

これで完了です!Unityでオブジェクト間の距離を取得してコンソールに表示する方法がわかりましたね。何か質問があれば、気軽に聞いてくださいね!

おすすめのアセット

Infinite Runner Engine 3Dは、無限ランナーゲームを簡単に作成できるUnityアセットです。初心者にも使いやすく、豊富なテンプレートやサンプルシーンが含まれています。プレイヤーキャラクター、障害物、パワーアップアイテムなど、すぐに使用できるコンポーネントが揃っており、カスタマイズも自由自在です。

スポンサーリンク
C-BA memo
タイトルとURLをコピーしました