Пример #1
0
        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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        /// <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);
        }
Пример #4
0
        /// <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);
            }
        }