ポイントをドラッグして形状のサイズを変更できるツールを Unity3D で作成しています。
ドラッグ ポイントは、サーフェスの法線に沿ってのみ移動できます (例の立方体は変形できず、引き伸ばされるだけです)。
当然、マウスは任意の方向にドラッグできるため、サーフェス法線に沿ってドラッグされた距離を計算しようとしています。
現在、私は次のことを行っています:
public static float NormalMoveHandle(Vector3 position, Vector3 normal)
{
Vector3 newPosition = FreeMoveHandle(position);
Vector3 dragVector = newPosition - position;
return Vector3.Dot(dragVector, normal) * dragVector.magnitude;
}
しかし、私は予測できない結果を得ています:
http://i.gyazo.com/35f3fc4b4e0471f3c5d70097ddc6f79f.mp4
短い距離以上ドラッグすると、値が突然 NaN になります。
計算を調整すると、より安定した動作が得られますが、ハンドルが遅くなります。これは、ハンドルが機能していることを示していると思います。問題は私の数学にあります。
return Vector3.Dot(dragVector, normal);
マグニチュードの計算に誤りはありますか?