Unity常用小工具类
日期: 2017-05-16 分类: 0o下载吧o0 1268次阅读
public static class ExtendTool { public static T AddMissingComponent<T>(this GameObject obj) where T : Component { T script = obj.GetComponent<T>(); if (script == null) { script = obj.AddComponent<T>(); } return script; } //角度转方向 public static Vector3 AngleToForward(this Vector3 Angle) { Quaternion qu = Quaternion.Euler(Angle); return (qu * Vector3.forward).normalized; } //方向转角度 public static Vector3 ForwardToAngle(this Vector3 Forward) { if (Forward == Vector3.zero) { return Forward; } Quaternion qu = Quaternion.LookRotation(Forward); return qu.eulerAngles; } //角度转换成 +-180 public static Vector3 AngleBetween180(this Vector3 vAngle) { if (vAngle.x > 180f) { vAngle.x -= 360f; } if (vAngle.y > 180f) { vAngle.y -= 360f; } if (vAngle.z > 180f) { vAngle.z -= 360f; } return vAngle; } //角度转化成 0 - 360 public static Vector3 AngleTo360(this Vector3 vAngle) { if (vAngle.x < 0) { vAngle.x += 360f; } if (vAngle.y < 0) { vAngle.y += 360f; } if (vAngle.z < 0) { vAngle.z += 360f; } return vAngle; } //计算方向按轴旋转一定角度后的方向 public static Vector3 ForwardRotateAngle(this Vector3 vCurDir, float dgree, Vector3 Axis) { Vector3 vAngle = vCurDir.ForwardToAngle(); vAngle += Axis.normalized * dgree; return vAngle.AngleToForward(); } //更改layer public static void ChangeLayer(this GameObject obj, int Layer) { obj.layer = Layer; Transform[] transChildren = obj.GetComponentsInChildren<Transform>(true); if (transChildren != null && transChildren.Length > 0) { foreach (var item in transChildren) { if (item != obj.transform) { ChangeLayer(item.gameObject, Layer); } } } } /// <summary> /// 判断是否在前面 /// </summary> /// <param name="Trans"></param> /// <param name="Target"></param> /// <returns></returns> public static bool CheckInFrontOfMe(this Transform Trans, Transform Target) { return Vector3.Dot(Trans.forward, (Target.position - Trans.position).normalized) > 0; } /// <summary> /// 判断左右 /// </summary> /// <param name="fwd1"></param> /// <param name="fwd2"></param> /// <returns>1右-1左0 正向</returns> public static int LeftRight(this Vector3 fwd1, Vector3 fwd2) { float result = Vector3.Cross(fwd1, fwd2).y; if (result > 0) { return 1; } else if (result < 0) { return -1; } return 0; } /// <summary> /// 判断前后 /// </summary> /// <param name="fwd1"></param> /// <param name="fwd2"></param> /// <returns>1前-1后0一起</returns> public static int FwdBack(this Vector3 fwd1, Vector3 fwd2) { float result = Vector3.Dot(fwd1, fwd2); if (result > 0) { return 1; } else if (result < 0) { return -1; } return 0; } }希望对你有用
源码下载链接:
除特别声明,本站所有文章均为原创,如需转载请以超级链接形式注明出处:SmartCat's Blog
上一篇: APK提取工具
下一篇: Unity刚体运动轨迹计算
精华推荐