public void AddCurves(Bvh bvh, AnimationClip clip, float toMeter) { AddCurve(bvh, clip, PositionX, -toMeter); AddCurve(bvh, clip, PositionY, toMeter); AddCurve(bvh, clip, PositionZ, toMeter); var pathWithProp = default(Bvh.PathWithProperty); bvh.TryGetPathWithPropertyFromChannel(RotationX, out pathWithProp); // rotation var curveX = new AnimationCurve(); var curveY = new AnimationCurve(); var curveZ = new AnimationCurve(); var curveW = new AnimationCurve(); for (int i = 0; i < bvh.FrameCount; ++i) { var time = (float)(i * bvh.FrameTime.TotalSeconds); var q = GetRotation(i).ReverseX(); curveX.AddKey(time, q.x); curveY.AddKey(time, q.y); curveZ.AddKey(time, q.z); curveW.AddKey(time, q.w); } clip.SetCurve(pathWithProp.Path, typeof(Transform), "localRotation.x", curveX); clip.SetCurve(pathWithProp.Path, typeof(Transform), "localRotation.y", curveY); clip.SetCurve(pathWithProp.Path, typeof(Transform), "localRotation.z", curveZ); clip.SetCurve(pathWithProp.Path, typeof(Transform), "localRotation.w", curveW); }
static void AddCurve(Bvh bvh, AnimationClip clip, ChannelCurve ch, float toMeter) { if (ch == null) { return; } var pathWithProp = default(Bvh.PathWithProperty); bvh.TryGetPathWithPropertyFromChannel(ch, out pathWithProp); var curve = new AnimationCurve(); for (int i = 0; i < bvh.FrameCount; ++i) { var time = (float)(i * bvh.FrameTime.TotalSeconds); var value = ch.Keys[i] * toMeter; curve.AddKey(time, value); } clip.SetCurve(pathWithProp.Path, typeof(Transform), pathWithProp.Property, curve); }