예제 #1
0
    private static bool InitPointsInfo()
    {
        if (animationPoints == null)
        {
            animationPoints = new List <AnimationPathPoint>();
        }
        animationPoints.Clear();

        String inPath = String.Empty;

        activeRootGameObject = activeGameObject;
        if (activeGameObject.GetComponent <Animator>() == null && activeGameObject.GetComponent <Animation>() == null)
        {
            Transform tr = activeGameObject.transform.parent;
            while (!(tr.GetComponent <Animator>() != null))
            {
                if (tr == tr.root)
                {
                    return(false);
                }
                tr = tr.parent;
            }
            activeRootGameObject = tr.gameObject;
            inPath = AnimationUtility.CalculateTransformPath(activeGameObject.transform, activeRootGameObject.transform);
        }
        activeParentTransform = activeGameObject.transform.parent;

        Type           inType       = typeof(Transform);
        AnimationCurve curveX       = AnimationUtility.GetEditorCurve(activeAnimationClip, EditorCurveBinding.FloatCurve(inPath, inType, "m_LocalPosition.x"));
        AnimationCurve curveY       = AnimationUtility.GetEditorCurve(activeAnimationClip, EditorCurveBinding.FloatCurve(inPath, inType, "m_LocalPosition.y"));
        AnimationCurve curveZ       = AnimationUtility.GetEditorCurve(activeAnimationClip, EditorCurveBinding.FloatCurve(inPath, inType, "m_LocalPosition.z"));
        Vector3        initPosition = activeRootGameObject.transform.localPosition;

        if (curveX == null || curveY == null || curveZ == null)
        {
            // 有可能是UI的动画
            var rt = activeRootGameObject.transform.GetComponent <RectTransform>();
            if (rt)
            {
                inType       = typeof(RectTransform);
                curveX       = AnimationUtility.GetEditorCurve(activeAnimationClip, EditorCurveBinding.FloatCurve(inPath, inType, "m_AnchoredPosition.x"));
                curveY       = AnimationUtility.GetEditorCurve(activeAnimationClip, EditorCurveBinding.FloatCurve(inPath, inType, "m_AnchoredPosition.y"));
                curveZ       = AnimationUtility.GetEditorCurve(activeAnimationClip, EditorCurveBinding.FloatCurve(inPath, inType, "m_AnchoredPosition.z"));
                initPosition = rt.anchoredPosition;

                if (curveX == null && curveY == null && curveZ == null)
                {
                    return(false);
                }
            }
            else
            {
                return(false);
            }
        }

        animationPoints = AnimationPathPoint.MakePoints(curveX, curveY, curveZ, initPosition);
        return(true);
    }
예제 #2
0
    private static bool InitPointsInfo()
    {
        if (animationPoints == null)
        {
            animationPoints = new List <AnimationPathPoint>();
        }
        animationPoints.Clear();

        String inPath = String.Empty;

        activeRootGameObject = activeGameObject;
        if (activeGameObject.GetComponent <Animator>() == null && activeGameObject.GetComponent <Animation>() == null)
        {
            Transform tr = activeGameObject.transform.parent;
            while (!(tr.GetComponent <Animator>() != null))
            {
                if (tr == tr.root)
                {
                    return(false);
                }
                tr = tr.parent;
            }
            activeRootGameObject = tr.gameObject;
            inPath = AnimationUtility.CalculateTransformPath(activeGameObject.transform, activeRootGameObject.transform);
        }
        activeParentTransform = activeGameObject.transform.parent;

        Type           inType = typeof(Transform);
        AnimationCurve curveX = AnimationUtility.GetEditorCurve(activeAnimationClip, EditorCurveBinding.FloatCurve(inPath, inType, "m_LocalPosition.x"));
        AnimationCurve curveY = AnimationUtility.GetEditorCurve(activeAnimationClip, EditorCurveBinding.FloatCurve(inPath, inType, "m_LocalPosition.y"));
        AnimationCurve curveZ = AnimationUtility.GetEditorCurve(activeAnimationClip, EditorCurveBinding.FloatCurve(inPath, inType, "m_LocalPosition.z"));

        if (curveX == null || curveY == null || curveZ == null)
        {
            //Debug.LogError(activeGameObject.name + " 必须要有完整的 Position 动画曲线!");
            return(false);
        }

        animationPoints = AnimationPathPoint.MakePoints(curveX, curveY, curveZ);
        return(true);
    }