public void AddQuaternionValue(ref UnityCurveContainer animCurveY, ref UnityCurveContainer animCurveZ, ref UnityCurveContainer animCurveW, float animTime, float previousFrameTime, Quaternion animValue)
    {
        Keyframe keyX = new Keyframe(animTime, animValue.x, 0.0f, 0.0f);
        Keyframe keyY = new Keyframe(animTime, animValue.y, 0.0f, 0.0f);
        Keyframe keyW = new Keyframe(animTime, animValue.z, 0.0f, 0.0f);
        Keyframe keyZ = new Keyframe(animTime, animValue.w, 0.0f, 0.0f);

        if (animCurve.keys.Length > 1 && previousFrameTime >= 0)
        {
            Keyframe lastKeyX = animCurve.keys[animCurve.keys.Length - 1];
            Keyframe lastKeyY = animCurveY.animCurve.keys[animCurveY.animCurve.keys.Length - 1];
            Keyframe lastKeyZ = animCurveZ.animCurve.keys[animCurveZ.animCurve.keys.Length - 1];
            Keyframe lastKeyW = animCurveW.animCurve.keys[animCurveW.animCurve.keys.Length - 1];

            Quaternion lastQuaternion   = new Quaternion(lastKeyX.value, lastKeyY.value, lastKeyZ.value, lastKeyW.value);
            float      lastKeyFrameTime = animCurve.keys[animCurve.keys.Length - 1].time;

            float FPS = 45f;

            if (Mathf.Abs(Quaternion.Angle(lastQuaternion, animValue)) > KeyTolerance)
            {
                Quaternion latestQuaternion = animValue;

                if (lastKeyFrameTime != previousFrameTime)
                {
                    float timeSpan    = (animTime - lastKeyFrameTime);
                    float numKeys     = (animTime - lastKeyFrameTime) * FPS;
                    float CurrentTime = 0;
                    for (int i = 0; i < numKeys; ++i)
                    {
                        CurrentTime = (i * timeSpan / FPS);
                        Quaternion interpolatedQuaternion = Quaternion.Lerp(lastQuaternion, animValue, CurrentTime / timeSpan);
                        CurrentTime += lastKeyFrameTime;

                        animCurve.AddKey(new Keyframe(CurrentTime, interpolatedQuaternion.x, 0.0f, 0.0f));
                        animCurveY.animCurve.AddKey(new Keyframe(CurrentTime, interpolatedQuaternion.y, 0.0f, 0.0f));
                        animCurveZ.animCurve.AddKey(new Keyframe(CurrentTime, interpolatedQuaternion.z, 0.0f, 0.0f));
                        animCurveW.animCurve.AddKey(new Keyframe(CurrentTime, interpolatedQuaternion.w, 0.0f, 0.0f));
                    }
                }
                else
                {
                    animCurve.AddKey(new Keyframe(animTime, animValue.x, 0.0f, 0.0f));
                    animCurveY.animCurve.AddKey(new Keyframe(animTime, animValue.y, 0.0f, 0.0f));
                    animCurveZ.animCurve.AddKey(new Keyframe(animTime, animValue.z, 0.0f, 0.0f));
                    animCurveW.animCurve.AddKey(new Keyframe(animTime, animValue.w, 0.0f, 0.0f));
                    //animCurve.AddKey(key);
                }
            }
        }
        else
        {
            animCurve.AddKey(new Keyframe(animTime, animValue.x, 0.0f, 0.0f));
            animCurveY.animCurve.AddKey(new Keyframe(animTime, animValue.y, 0.0f, 0.0f));
            animCurveZ.animCurve.AddKey(new Keyframe(animTime, animValue.z, 0.0f, 0.0f));
            animCurveW.animCurve.AddKey(new Keyframe(animTime, animValue.w, 0.0f, 0.0f));
        }
    }
    public UnityBlendShapeAnimation(string hierarchyPath, SkinnedMeshRenderer observeSkinnedMeshRenderer)
    {
        pathName    = hierarchyPath;
        skinMeshObj = observeSkinnedMeshRenderer;

        //int blendShapeCount = skinMeshObj.getbl
        Mesh blendShapeMesh = skinMeshObj.sharedMesh;

        blendShapeCount = blendShapeMesh.blendShapeCount;

        blendShapeNames = new string[blendShapeCount];
        curves          = new UnityCurveContainer[blendShapeCount];

        // create curve objs and add names
        for (int i = 0; i < blendShapeCount; i++)
        {
            blendShapeNames [i] = blendShapeMesh.GetBlendShapeName(i);
            curves [i]          = new UnityCurveContainer("blendShape." + blendShapeNames [i]);
        }
    }
Ejemplo n.º 3
0
    public UnityObjectAnimation(string hierarchyPath, Transform observeObj)
    {
        pathName          = hierarchyPath;
        observeGameObject = observeObj;

        curves = new UnityCurveContainer[10];

        curves [0] = new UnityCurveContainer("localPosition.x");
        curves [1] = new UnityCurveContainer("localPosition.y");
        curves [2] = new UnityCurveContainer("localPosition.z");

        curves [3] = new UnityCurveContainer("localRotation.x");
        curves [4] = new UnityCurveContainer("localRotation.y");
        curves [5] = new UnityCurveContainer("localRotation.z");
        curves [6] = new UnityCurveContainer("localRotation.w");

        curves [7] = new UnityCurveContainer("localScale.x");
        curves [8] = new UnityCurveContainer("localScale.y");
        curves [9] = new UnityCurveContainer("localScale.z");
    }
Ejemplo n.º 4
0
    public UnityObjectAnimation(string hierarchyPath, Transform observeObj, bool recordScale)
    {
        RecordScale       = recordScale;
        pathName          = hierarchyPath;
        observeGameObject = observeObj;

        curves = new UnityCurveContainer[RecordScale ? 10 : 7];

        curves [0] = new UnityCurveContainer("localPosition.x");
        curves [1] = new UnityCurveContainer("localPosition.y");
        curves [2] = new UnityCurveContainer("localPosition.z");

        curves [3] = new UnityCurveContainer("localRotation.x");
        curves [4] = new UnityCurveContainer("localRotation.y");
        curves [5] = new UnityCurveContainer("localRotation.z");
        curves [6] = new UnityCurveContainer("localRotation.w");

        if (RecordScale)
        {
            curves[7] = new UnityCurveContainer("localScale.x");
            curves[8] = new UnityCurveContainer("localScale.y");
            curves[9] = new UnityCurveContainer("localScale.z");
        }
    }