Cooooding!!

Unity(C#)を使ったゲーム開発関連Tipsなど

Planeのdistanceについて【Unity】

概要

UnityEngine.Planeのdistanceがわかりにくく理解に少し苦労したのでわかったことをまとめました。

法線と距離を使った平面の表現

平面は法線と原点との距離を使って表すことができます。
Planeと法線とdistanceの関係図

UnityのPlaneも法線と距離を指定して初期化することができます。

var plane = new Plane(Vector3.up, 1);

ただ、ここで注意しなければならないのはdistanceが「原点からの距離」ではなく「原点までの距離」であるということです。

例えば、Plane(Vector3.up, 1)ならば以下の図のようになるのは間違いです。
間違い。これはPlane(Vector3.up, 1)ではない

正解はこちらです。
こちらが正解。これがPlane(Vector3.up, 1)

公式ドキュメントには「原点から平面への距離を返します(Distance from the origin to the plane)」と書かれていますが、おそらくこれが間違っています。GetDistanceToPointという平面と点の距離を計算するメソッドがあるのでこれを使って確認してみます。

ソースコード

// y軸方向の法線を持ち、距離1の平面を作る
var plane = new Plane(Vector3.up, 1);
// (x, y, z) = (0, 1, 0)の点と平面の距離を計算
var distance = plane.GetDistanceToPoint(new Vector3(0, 1, 0));
// 距離を出力
Debug.LogFormat("distance = {0}", distance);

出力結果

distance = 2

(0, 1, 0)と平面の距離が2になるのでPlane(Vector3.up, 1)は(0, 1, 0)を通っていないことがわかります。

環境

  • Unity 2018.4.2f1