示例#1
0
    private static bool SetPointTangent(int pointIndex, Vector3 worldTangent, bool isInTangent)
    {
        List <AnimationPathPoint> points        = animationPoints;
        AnimationPathPoint        pathPoint     = null;
        AnimationPathPoint        nextPathPoint = null;
        Vector3 offset = Vector3.zero;

        if (isInTangent)
        {
            pathPoint     = points[pointIndex - 1];
            nextPathPoint = points[pointIndex];

            offset = GetLocalPosition(worldTangent) - GetLocalPosition(nextPathPoint.worldInTangent);
        }
        else
        {
            pathPoint     = points[pointIndex];
            nextPathPoint = points[pointIndex + 1];

            offset = GetLocalPosition(worldTangent) - GetLocalPosition(pathPoint.worldOutTangent);
        }

        string             inPath   = AnimationUtility.CalculateTransformPath(activeGameObject.transform, activeRootGameObject.transform);
        Type               inType   = typeof(Transform);
        EditorCurveBinding bindingX = EditorCurveBinding.FloatCurve(inPath, inType, "m_LocalPosition.x");
        EditorCurveBinding bindingY = EditorCurveBinding.FloatCurve(inPath, inType, "m_LocalPosition.y");
        EditorCurveBinding bindingZ = EditorCurveBinding.FloatCurve(inPath, inType, "m_LocalPosition.z");

        AnimationCurve curveX = AnimationUtility.GetEditorCurve(activeAnimationClip, bindingX);
        AnimationCurve curveY = AnimationUtility.GetEditorCurve(activeAnimationClip, bindingY);
        AnimationCurve curveZ = AnimationUtility.GetEditorCurve(activeAnimationClip, bindingZ);

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

        AnimationPathPoint.ModifyPointTangent(pathPoint, nextPathPoint, offset, isInTangent, curveX, curveY, curveZ);

        Undo.RegisterCompleteObjectUndo(activeAnimationClip, "Edit Curve");
        AnimationUtility.SetEditorCurve(activeAnimationClip, bindingX, curveX);
        AnimationUtility.SetEditorCurve(activeAnimationClip, bindingY, curveY);
        AnimationUtility.SetEditorCurve(activeAnimationClip, bindingZ, curveZ);
        AnimationWindowUtil.Repaint();

        return(true);
    }