「毎日Unity」の技術ブログ

開発で役立つ情報を発信する

【UnityC#】3次元空間で直線ABと点Pの距離を求める方法

3次元空間で直線ABと点Pの距離を求める方法をメモ。

[ 方法 ]

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

public class script : MonoBehaviour
{
    // 点Pから最も近い直線AB上に存在する点を求める関数
    private Vector3 ClosestPointOnStraightLine(Vector3 a, Vector3 b, Vector3 p)
    {
        Vector3 vecAB = b - a;
        Vector3 vecAP = p - a;

        Vector3 closestPos = a + Vector3.Project(vecAP, vecAB);

        return closestPos;
    }

    // 直線ABと点Pの距離を求める関数
    private float DistBetweenPointAndStraightLine(Vector3 a, Vector3 b, Vector3 p)
    {
        Vector3 closestPoint = ClosestPointOnStraightLine(a, b, p);

        float dist = Vector3.Distance(closestPoint, p);

        return dist;
    }
}