/// <summary> /// 使transform面向target /// </summary> /// <param name="transform">旋转对象</param> /// <param name="formRotation">初始rotation</param> /// <param name="toTarget">面向的位置</param> /// <param name="interpolate">插值[0-1]</param> /// <param name="lerpType">插值类型</param> /// <param name="withoutAxis"></param> /// <returns></returns> public static bool FaceToTarget(Transform transform, Quaternion formRotation, Vector3 toTarget, float interpolate = 1, PBEnums.LerpType lerpType = PBEnums.LerpType.Lerp, PBEnums.Axis withoutAxis = PBEnums.Axis.None) { Vector3 face = toTarget - transform.position; SetVector3WithoutAxis(ref face, withoutAxis, 0); Quaternion toRotation = Quaternion.LookRotation(face); if (interpolate > 1) { interpolate = 1; } switch (lerpType) { case PBEnums.LerpType.Lerp: transform.rotation = Quaternion.Lerp(formRotation, toRotation, interpolate); break; case PBEnums.LerpType.Slerp: transform.rotation = Quaternion.Slerp(formRotation, toRotation, interpolate); break; } if (interpolate == 1) { return(true); } else { return(false); } }
/// <summary> /// 面对面 /// </summary> /// <param name="T1"></param> /// <param name="T1FormRotation"></param> /// <param name="T2"></param> /// <param name="T2FormRotation"></param> /// <param name="interpolate"></param> /// <param name="lerpType"></param> /// <param name="withoutAxis"></param> /// <returns></returns> public static bool FaceToFace(Transform T1, Quaternion T1FormRotation, Transform T2, Quaternion T2FormRotation, float interpolate = 1, PBEnums.LerpType lerpType = PBEnums.LerpType.Lerp, PBEnums.Axis withoutAxis = PBEnums.Axis.None) { bool a = FaceToTarget(T1, T1FormRotation, T2.position, interpolate, lerpType, withoutAxis); bool b = FaceToTarget(T2, T2FormRotation, T1.position, interpolate, lerpType, withoutAxis); return(a && b); }
/// <summary> /// 移动 /// </summary> /// <param name="transform"></param> /// <param name="formPos"></param> /// <param name="toPos"></param> /// <param name="interpolate"></param> /// <returns></returns> public static bool MoveTo(Transform transform, Vector3 formPos, Vector3 toPos, float interpolate = 1, PBEnums.LerpType lerpType = PBEnums.LerpType.Lerp) { if (interpolate > 1) { interpolate = 1; } switch (lerpType) { case PBEnums.LerpType.Lerp: transform.position = Vector3.Lerp(formPos, toPos, interpolate); break; case PBEnums.LerpType.Slerp: transform.position = Vector3.Slerp(formPos, toPos, interpolate); break; } if (interpolate == 1) { return(true); } else { return(false); } }