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); }
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); }