private void DrawKeyFrameMarkers() { int i = 0; foreach (KeyFrame keyFrame in this.cameraController.keyFrames) { float t = (keyFrame.time - this.recorder.startTime) / (this.recorder.endTime - this.recorder.startTime); Color textColor = (keyFrame is FreeCameraKeyFrame) ? Color.blue : ((keyFrame is OrbitCameraKeyFrame) ? Color.red : Color.green); ReplaySkin.DefaultSkin.markerStyle.normal.textColor = textColor; Rect markerRect = ReplaySkin.DefaultSkin.MarkerRectForNormT(t); int index = i; GUIHelper.DraggableArea( "keyframe" + keyFrame.GetHashCode(), markerRect, delegate(out bool beginDrag) { //GUI Draw GUILayout.BeginVertical(); GUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); GUILayout.Label("|", ReplaySkin.DefaultSkin.markerStyle, GUILayout.ExpandHeight(true)); GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); beginDrag = GUILayout.RepeatButton("O", ReplaySkin.DefaultSkin.markerStyle); GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); GUILayout.FlexibleSpace(); GUILayout.EndVertical(); }, () => SetPlaybackTime(keyFrame.time), delegate(ref Rect r) { //OnDragUpdate float xmin = ReplaySkin.DefaultSkin.sliderRect.xMin + (float)ReplaySkin.DefaultSkin.sliderPadding / 2f; float xmax = ReplaySkin.DefaultSkin.sliderRect.xMax - (float)ReplaySkin.DefaultSkin.sliderPadding / 2f; r.center = new Vector2(Mathf.Clamp(r.center.x, xmin, xmax), markerRect.center.y); float time = this.recorder.startTime + ReplaySkin.DefaultSkin.NormTForMarkerRect(r) * (this.recorder.endTime - this.recorder.startTime); keyFrame.ApplyTo(cameraController.camera); SetPlaybackTime(time); }, delegate(Rect r) { //OnDrop float time = this.recorder.startTime + ReplaySkin.DefaultSkin.NormTForMarkerRect(r) * (this.recorder.endTime - this.recorder.startTime); keyFrame.Update(cameraController.camera.transform, time); cameraController.cameraCurve.DeleteCurveKeys(index); keyFrame.AddKeyframes(cameraController.cameraCurve); }, this, true); i++; } }