private static SceneViewState SetSceneViewState(this SceneView sceneView, SceneViewState newState) { SceneViewState state = null; try { FieldInfo sceneViewState = typeof(SceneView).GetField("m_SceneViewState", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); sceneViewState.SetValue(sceneView, newState); } catch (System.Exception e) { if (EditorFullscreenState.LogNonFatalErrors) { Debug.LogException(e); } } return(state); }
private static SceneViewState SetSceneViewState(this SceneView sceneView, SceneViewState newState) { SceneViewState state = null; try { FieldInfo sceneViewState = typeof(SceneView).GetField("m_SceneViewState", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); sceneViewState.SetValue(sceneView, newState); } catch (System.Exception e) { if (EWFDebugging.Enabled) { Debug.LogException(e); EWFDebugging.LogError(e.Message); } } return(state); }
/// <summary> /// Copy the state of the SceneView to another SceneView. /// </summary> /// <param name="from">The SceneView to copy from.</param> /// <param name="copyToSceneView">The SceneView to copy to.</param> /// /// <returns>True if the copy was completely successful</returns> public static bool CopyStateTo(this SceneView fromSceneView, SceneView copyToSceneView) { bool completeCopy = true; SceneViewState fromState = GetSceneViewState(fromSceneView); SceneViewState fromStateCopy = new SceneViewState(fromState); copyToSceneView.SetSceneViewState(fromStateCopy); var publicFields = typeof(SceneView).GetFields(BindingFlags.DeclaredOnly | BindingFlags.Instance | BindingFlags.Public).Where(field => (field.FieldType.IsValueType || field.FieldType == typeof(string))).ToList(); var publicProperties = typeof(SceneView).GetProperties(BindingFlags.DeclaredOnly | BindingFlags.Instance | BindingFlags.Public).Where(prop => prop.PropertyType.IsArray == false && (prop.PropertyType.IsValueType || prop.PropertyType == typeof(string)) && prop.GetGetMethod() != null && prop.GetSetMethod() != null).ToList(); //Copy the Scene Visibility and Tools Popup status completeCopy = completeCopy && fromSceneView.CopyPrivateFieldTo("m_SceneVisActive", copyToSceneView); completeCopy = completeCopy && fromSceneView.CopyPrivateFieldTo("m_ShowContextualTools", copyToSceneView); //Copy the camera settings #if UNITY_2018_1_OR_NEWER fromSceneView.CopyCameraSettingsTo(copyToSceneView); #endif foreach (var field in publicFields) { if (CustomSceneView.takeAudioState == false && field.Name == "m_AudioPlay") { continue; } field.SetValue(copyToSceneView, field.GetValue(fromSceneView)); } foreach (var prop in publicProperties) { prop.SetValue(copyToSceneView, prop.GetValue(fromSceneView, null), null); } if (CustomSceneView.takeAudioState) { copyToSceneView.RefreshAudioPlay(); } return(completeCopy); }
/// <summary> /// Copy the state of the SceneView to another SceneView. /// </summary> /// <param name="from">The SceneView to copy from.</param> /// <param name="copyToSceneView">The SceneView to copy to.</param> public static void CopyStateTo(this SceneView fromSceneView, SceneView copyToSceneView) { SceneViewState fromState = GetSceneViewState(fromSceneView); SceneViewState fromStateCopy = new SceneViewState(fromState); copyToSceneView.SetSceneViewState(fromStateCopy); var publicFields = typeof(SceneView).GetFields(BindingFlags.DeclaredOnly | BindingFlags.Instance | BindingFlags.Public).Where(field => (field.FieldType.IsValueType || field.FieldType == typeof(string))).ToList(); var publicProperties = typeof(SceneView).GetProperties(BindingFlags.DeclaredOnly | BindingFlags.Instance | BindingFlags.Public).Where(prop => prop.PropertyType.IsArray == false && (prop.PropertyType.IsValueType || prop.PropertyType == typeof(string)) && prop.GetGetMethod() != null && prop.GetSetMethod() != null).ToList(); foreach (var field in publicFields) { if (CustomSceneView.takeAudioState == false && field.Name == "m_AudioPlay") { continue; } field.SetValue(copyToSceneView, field.GetValue(fromSceneView)); } foreach (var prop in publicProperties) { prop.SetValue(copyToSceneView, prop.GetValue(fromSceneView, null), null); } }