Young87

SmartCat's Blog

So happy to code my life!

游戏开发交流QQ群号60398951

当前位置:首页 >0o下载吧o0

Unity常用小工具类

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刚体运动轨迹计算

精华推荐