Unity常用小工具类
日期: 2017-05-16 分类: 0o下载吧o0 1628次阅读
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刚体运动轨迹计算
精华推荐
