/// <summary> /// Set the RecorderWindow controller settings and update the UI. This allow to set settings even if /// the window is open. /// </summary> /// <param name="settings">The new <see cref="RenderControllerSettings"/> to set.</param> public void SetRecorderControllerSettings(RecorderControllerSettings settings) { m_ControllerSettings = settings; m_RecorderController = new RecorderController(settings); m_RecorderSettingsPrefsEditor = (RecorderSettingsPrefsEditor)Editor.CreateEditor(m_ControllerSettings); ReloadRecordings(); }
internal static RecorderSessionEndEvent CreateStopEvent(RecorderController controller, bool error) { if (!controller2guid.TryGetValue(controller, out var guid)) { return(new RecorderSessionEndEvent()); // Should never happen } controller2guid.Remove(controller); var session = controller.m_RecordingSessions.FirstOrDefault(x => x.settings.Enabled); RecorderSessionEndEvent data; if (session == null) { data = new RecorderSessionEndEvent { outcome = RecorderSessionEndEvent.Outcome.Error.ConvertToString() }; } else { data = new RecorderSessionEndEvent { recorder_session_guid = guid, elapsed_ms = Mathf.Max(0, (int)(session.currentFrameStartTS * 1000)), frames_recorded = session.recorder.RecordedFramesCount, outcome = (error ? RecorderSessionEndEvent.Outcome.Error : GetOutcome(session)).ConvertToString() }; } #if DEBUG_ANALYTICS var json = JsonUtility.ToJson(data, prettyPrint: true); Debug.Log(json); #endif return(data); }
internal static RecorderSessionStartEvent CreateSessionStartEvent(RecorderController controller) { var guid = GUID.Generate().ToString(); controller2guid[controller] = guid; var controllerSettings = controller.Settings; var data = new RecorderSessionStartEvent { recorder_session_guid = guid, exit_play_mode = RecorderOptions.exitPlayMode, recording_mode = controllerSettings.RecordMode.ConvertToString(), playback_mode = controllerSettings.FrameRatePlayback.ConvertToString(), target_fps = controllerSettings.FrameRate, cap_fps = controllerSettings.CapFrameRate, triggered_by = "recorder", render_pipeline = GetCurrentRenderPipeline(), }; GetSpecificRecorderInfos( controller.m_RecordingSessions.Select(x => x.recorder).Where(x => x.settings.Enabled), out data.animation_recorder_info, out data.image_recorder_info, out data.movie_recorder_info, out data.gif_recorder_info, out data.recorder_info); #if DEBUG_ANALYTICS var json = JsonUtility.ToJson(data, prettyPrint: true); Debug.Log(json); #endif return(data); }
public static void SendStopEvent(RecorderController controller, bool error) { if (!EditorAnalytics.enabled) { return; } EditorAnalytics.RegisterEventWithLimit(completeEventName, maxEventsPerHour, maxNumberOfElements, vendorKey); var data = CreateStopEvent(controller, error); EditorAnalytics.SendEventWithLimit(completeEventName, data); }
void OnEnable() { minSize = new Vector2(560.0f, 200.0f); #if UNITY_2019_1_OR_NEWER var root = rootVisualElement; root.styleSheets.Add(Resources.Load <StyleSheet>(s_StylesFolder + "recorder")); root.styleSheets.Add(Resources.Load <StyleSheet>(s_StylesFolder + (EditorGUIUtility.isProSkin ? "recorder_darkSkin" : "recorder_lightSkin"))); #else var root = this.GetRootVisualContainer(); root.AddStyleSheetPath(s_StylesFolder + "recorder"); root.AddStyleSheetPath(s_StylesFolder + (EditorGUIUtility.isProSkin ? "recorder_darkSkin" : "recorder_lightSkin")); #endif root.style.flexDirection = FlexDirection.Column; UIElementHelper.SetFocusable(root); var mainControls = new VisualElement { style = { flexDirection = FlexDirection.Row, minHeight = 110.0f } }; root.Add(mainControls); var controlLeftPane = new VisualElement { style = { #if UNITY_2018_1 minWidth = 350.0f, #else minWidth = 180.0f, #endif maxWidth = 450.0f, flexDirection = FlexDirection.Row, } }; UIElementHelper.SetFlex(controlLeftPane, 0.5f); var controlRightPane = new VisualElement { style = { flexDirection = FlexDirection.Column, } }; UIElementHelper.SetFlex(controlRightPane, 0.5f); mainControls.Add(controlLeftPane); mainControls.Add(controlRightPane); controlLeftPane.AddToClassList("StandardPanel"); controlRightPane.AddToClassList("StandardPanel"); m_RecordButtonIcon = new Button(OnRecordButtonClick) { name = "recorderIcon", style = { backgroundImage = Resources.Load <Texture2D>("recorder_icon"), } }; controlLeftPane.Add(m_RecordButtonIcon); var leftButtonsStack = new VisualElement { style = { flexDirection = FlexDirection.Column, } }; UIElementHelper.SetFlex(leftButtonsStack, 1.0f); m_RecordButton = new Button(OnRecordButtonClick) { name = "recordButton" }; UpdateRecordButtonText(); leftButtonsStack.Add(m_RecordButton); m_RecordOptionsPanel = new IMGUIContainer(() => { PrepareGUIState(m_RecordOptionsPanel.layout.width); Options.exitPlayMode = EditorGUILayout.Toggle(Styles.ExitPlayModeLabel, Options.exitPlayMode); }) { name = "recordOptions" }; UIElementHelper.SetFlex(m_RecordOptionsPanel, 1.0f); leftButtonsStack.Add(m_RecordOptionsPanel); m_RecordModeOptionsPanel = new IMGUIContainer(() => { PrepareGUIState(m_RecordModeOptionsPanel.layout.width); if (m_RecorderSettingsPrefsEditor.RecordModeGUI()) { OnGlobalSettingsChanged(); } }); UIElementHelper.SetFlex(m_RecordModeOptionsPanel, 1.0f); leftButtonsStack.Add(m_RecordModeOptionsPanel); controlLeftPane.Add(leftButtonsStack); m_FrameRateOptionsPanel = new IMGUIContainer(() => { PrepareGUIState(m_FrameRateOptionsPanel.layout.width); if (m_RecorderSettingsPrefsEditor.FrameRateGUI()) { OnGlobalSettingsChanged(); } }); UIElementHelper.SetFlex(m_FrameRateOptionsPanel, 1.0f); controlRightPane.Add(m_FrameRateOptionsPanel); m_SettingsPanel = new ScrollView(); UIElementHelper.SetFlex(m_SettingsPanel, 1.0f); UIElementHelper.ResetStylePosition(m_SettingsPanel.contentContainer.style); var recordersAndParameters = new VisualElement { style = { alignSelf = Align.Stretch, flexDirection = FlexDirection.Row, } }; UIElementHelper.SetFlex(recordersAndParameters, 1.0f); m_RecordersPanel = new VisualElement { name = "recordersPanel", style = { width = 200.0f, minWidth = 150.0f, maxWidth = 500.0f } }; m_RecordersPanel.AddToClassList("StandardPanel"); m_PanelSplitter = new PanelSplitter(m_RecordersPanel); recordersAndParameters.Add(m_RecordersPanel); recordersAndParameters.Add(m_PanelSplitter); recordersAndParameters.Add(m_SettingsPanel); m_SettingsPanel.AddToClassList("StandardPanel"); root.Add(recordersAndParameters); var addRecordButton = new Label("+ Add New Recorders"); UIElementHelper.SetFlex(addRecordButton, 1.0f); var recorderListPresetButton = new VisualElement { name = "recorderListPreset" }; recorderListPresetButton.RegisterCallback <MouseUpEvent>(evt => ShowRecorderListMenu()); recorderListPresetButton.Add(new Image { image = (Texture2D)EditorGUIUtility.Load("Builtin Skins/" + (EditorGUIUtility.isProSkin ? "DarkSkin" : "LightSkin") + "/Images/pane options.png"), style = { width = 16.0f, height = 11.0f } }); addRecordButton.AddToClassList("RecorderListHeader"); recorderListPresetButton.AddToClassList("RecorderListHeader"); addRecordButton.RegisterCallback <MouseUpEvent>(evt => ShowNewRecorderMenu()); m_AddNewRecordPanel = new VisualElement { name = "addRecordersButton", style = { flexDirection = FlexDirection.Row } }; m_AddNewRecordPanel.Add(addRecordButton); m_AddNewRecordPanel.Add(recorderListPresetButton); m_RecordingListItem = new RecorderItemList { name = "recorderList" }; UIElementHelper.SetFlex(m_RecordingListItem, 1.0f); UIElementHelper.SetFocusable(m_RecordingListItem); m_RecordingListItem.OnItemContextMenu += OnRecordContextMenu; m_RecordingListItem.OnSelectionChanged += OnRecordSelectionChanged; m_RecordingListItem.OnItemRename += item => item.StartRenaming(); m_RecordingListItem.OnContextMenu += ShowNewRecorderMenu; m_RecordersPanel.Add(m_AddNewRecordPanel); m_RecordersPanel.Add(m_RecordingListItem); m_ParametersControl = new VisualElement { style = { minWidth = 300.0f, } }; UIElementHelper.SetFlex(m_ParametersControl, 1.0f); m_ParametersControl.Add(new Button(OnRecorderSettingPresetClicked) { name = "presetButton", style = { alignSelf = Align.FlexEnd, backgroundImage = PresetHelper.presetIcon, paddingTop = 0.0f, paddingLeft = 0.0f, paddingBottom = 0.0f, paddingRight = 0.0f, #if UNITY_2019_1_OR_NEWER unityBackgroundScaleMode = ScaleMode.ScaleToFit, #elif UNITY_2018_3_OR_NEWER backgroundScaleMode = ScaleMode.ScaleToFit, #else backgroundSize = ScaleMode.ScaleToFit, #endif #if UNITY_2019_1_OR_NEWER unitySliceTop = 0, unitySliceBottom = 0, unitySliceLeft = 0, unitySliceRight = 0, #else sliceTop = 0, sliceBottom = 0, sliceLeft = 0, sliceRight = 0, #endif } }); m_RecorderSettingPanel = new IMGUIContainer(OnRecorderSettingsGUI) { name = "recorderSettings" }; UIElementHelper.SetFlex(m_RecorderSettingPanel, 1.0f); var statusBar = new VisualElement { name = "statusBar" }; statusBar.Add(new IMGUIContainer(UpdateRecordingProgressGUI)); root.Add(statusBar); m_ParametersControl.Add(m_RecorderSettingPanel); m_SettingsPanel.Add(m_ParametersControl); m_ControllerSettings = RecorderControllerSettings.LoadOrCreate(Application.dataPath + s_PrefsFileName); m_RecorderController = new RecorderController(m_ControllerSettings); m_RecorderSettingsPrefsEditor = (RecorderSettingsPrefsEditor)Editor.CreateEditor(m_ControllerSettings); #if UNITY_2018_2_OR_NEWER m_RecordingListItem.RegisterCallback <ValidateCommandEvent>(OnRecorderListValidateCommand); m_RecordingListItem.RegisterCallback <ExecuteCommandEvent>(OnRecorderListExecuteCommand); #else m_RecordingListItem.RegisterCallback <IMGUIEvent>(OnRecorderListIMGUI); #endif m_RecordingListItem.RegisterCallback <KeyUpEvent>(OnRecorderListKeyUp); ReloadRecordings(); Undo.undoRedoPerformed += SaveAndRepaint; EditorApplication.playModeStateChanged += OnPlayModeStateChanged; }