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