private void RenderTransformAnimation(TransformCurves transformCurves, float time) { Vector3 pos = transformCurves.GetPosition(time);//new Vector3( xPos.Evaluate(t), yPos.Evaluate(t), zPos.Evaluate(t) ); Quaternion rot = transformCurves.GetRotation(time); Vector3 scale = transformCurves.GetScale(time); transformCurves.bone.localScale = scale; transformCurves.bone.localRotation = rot; transformCurves.bone.localPosition = pos; Handles.RectangleCap(0, pos, rot, 0.1f); Handles.RectangleCap(0, pos + rot * Vector3.forward, rot, 0.4f); }
public void RenderTransformCurves(int samplesPerSecond) { if (_transformCurves == null || _transformCurves.clip == null) { CreateTransformCurves(); } else { _transformCurves.RefreshCurves(); } float totalTime = AnimEvt.LengthTime; float timePerSample = totalTime / samplesPerSecond; int numSamples = Mathf.RoundToInt(totalTime / timePerSample) + 1; Vector3[] pts = new Vector3[numSamples]; float t = 0; for (int i = 0; i < numSamples; ++i) { pts[i] = _transformCurves.GetWorldPosition(t); t += timePerSample; } Handles.DrawPolyLine(pts); FAnimationTrackEditor animTrackEditor = (FAnimationTrackEditor)TrackEditor; // if( _transformCurves.clip.name.Contains("1") ) // Debug.Log( _transformCurves.xRot.keys[0].tangentMode + " " + _transformCurves.yRot[0].tangentMode + " " + _transformCurves.zRot[0].tangentMode + " " + _transformCurves.wRot[0].tangentMode ); if (animTrackEditor.ShowKeyframes || animTrackEditor.ShowKeyframeTimes) { int animFramerate = Mathf.RoundToInt(_transformCurves.clip.frameRate); Keyframe[] keyframes = _transformCurves.GetPositionKeyframes(); for (int i = 0; i != keyframes.Length; ++i) { Keyframe keyframe = keyframes[i]; Vector3 pos = _transformCurves.GetPosition(keyframe.time); Quaternion rot = _transformCurves.GetRotation(keyframe.time); Quaternion toolRot = rot; bool isGlobalRotation = Tools.pivotRotation == PivotRotation.Global; if (isGlobalRotation) { toolRot = _globalRotation; //Quaternion.identity; } // Handles.color = Color.gray; // Vector3 newPos = Handles.FreeMoveHandle(pos, rot, 1, Vector3.one*0.2f, Handles.SphereCap);//Handles.PositionHandle( pos, rot ); if (animTrackEditor.ShowKeyframes) { if (Tools.current == Tool.Move) { Vector3 newPos = Handles.DoPositionHandle(pos, toolRot); //Handles.PositionHandle( pos, rot ); if (newPos != pos) { Undo.RecordObject(_transformCurves.clip, "Change Keyframe"); _transformCurves.SetPosition(newPos, keyframe.time); } } else if (Tools.current == Tool.Rotate) { Quaternion newRot = Handles.DoRotationHandle(toolRot, pos); if (newRot != toolRot) { Undo.RecordObject(_transformCurves.clip, "Change Keyframe"); _transformCurves.SetRotation(isGlobalRotation ? (newRot * Quaternion.Inverse(toolRot)) * rot : newRot, keyframe.time); if (isGlobalRotation) { _globalRotation = newRot; } } } } if (Event.current.type == EventType.MouseUp || Event.current.type == EventType.Ignore) { _globalRotation = Quaternion.identity; } if (animTrackEditor.ShowKeyframeTimes) { int frame = Mathf.RoundToInt(keyframe.time * animFramerate); Handles.Label(pos + new Vector3(0, .25f, 0), FUtility.GetTime(AnimEvt.Start + frame, animFramerate), EditorStyles.toolbarButton); } // Handles.BeginGUI(); // Vector3 screenPos = SceneView.currentDrawingSceneView.camera.WorldToScreenPoint( pos ); // GUI.Label( new Rect( screenPos.x-10, SceneView.currentDrawingSceneView.position.height-screenPos.y-50, 20, 20 ), keyframe.time.ToString() ); // Handles.EndGUI(); } } }