public static RaycastInfo TransformRayCastInfo(this Transform t, RaycastInfo r) { float dist = r.Distance; var sc = MatrixToScale(t.localToWorldMatrix); if (sc.sqrMagnitude != 1.0f) { var v = r.Direction * r.Distance; v = Matrix4x4.Scale(sc).MultiplyPoint(v); dist = v.magnitude; } return new RaycastInfo(t.TransformPoint(r.Origin), t.TransformDirection(r.Direction), dist); }
/// <summary> /// Transform ray cast info by a transformation /// </summary> /// <param name="m"></param> /// <param name="r"></param> /// <returns></returns> public static RaycastInfo TransformRayCastInfo(this Matrix4x4 m, RaycastInfo r) { float dist = r.Distance; var sc = MatrixToScale(m); if (sc.sqrMagnitude != 1.0f) { var v = r.Direction * r.Distance; v = Matrix4x4.Scale(sc).MultiplyPoint(v); dist = v.magnitude; } return new RaycastInfo(m.MultiplyPoint(r.Origin), m.MultiplyVector(r.Direction), dist); }