protected virtual void Awake()
        {
            if (Instance != null)
            {
                Debug.LogWarning("Another instance of RTE exists");
                return;
            }
            if (m_useBuiltinUndo)
            {
                m_undo = new RuntimeUndo(this);
            }
            else
            {
                m_undo = new DisabledUndo();
            }

            m_uiRaycaster = IOC.Resolve <IUIRaycaster>();
            if (m_uiRaycaster == null)
            {
                m_uiRaycaster = GetComponentInChildren <IUIRaycaster>();
            }

            IsVR            = /*UnityEngine.XR.XRDevice.isPresent*/ false && m_enableVRIfAvailable;
            m_selection     = new RuntimeSelection(this);
            m_dragDrop      = new DragDrop(this);
            m_object        = gameObject.GetComponent <RuntimeObjects>();
            m_disabledInput = new DisabledInput();
            m_activeInput   = m_disabledInput;

            Instance = this;

            bool isOpened = m_isOpened;

            m_isOpened = !isOpened;
            IsOpened   = isOpened;

            if (m_createHierarchyRoot)
            {
                GameObject hierarchyRoot = GameObject.FindGameObjectWithTag(ExposeToEditor.HierarchyRootTag);
                if (hierarchyRoot == null)
                {
                    hierarchyRoot = new GameObject("HierarchyRoot");
                }
                hierarchyRoot.transform.position = Vector3.zero;
                hierarchyRoot.tag = ExposeToEditor.HierarchyRootTag;
            }
        }
        protected virtual void BuildUp(GameObject editor)
        {
            GameObject ui = new GameObject("UI");

            ui.transform.SetParent(editor.transform);

            RenderPipelineInfo.ForceUseRenderTextures = false;

            Canvas canvas = ui.AddComponent <Canvas>();

            if (IsVR)
            {
                canvas.renderMode  = RenderMode.WorldSpace;
                canvas.worldCamera = Camera.main;
            }
            else
            {
                canvas.renderMode = RenderMode.ScreenSpaceOverlay;
            }
            canvas.sortingOrder = short.MinValue;
            editor.AddComponent <RTEGraphics>();

            GameObject scene = new GameObject("SceneWindow");

            scene.transform.SetParent(ui.transform, false);
            RuntimeCameraWindow sceneView = scene.AddComponent <RuntimeCameraWindow>();

            sceneView.IsPointerOver = true;
            sceneView.WindowType    = RuntimeWindowType.Scene;
            if (Camera.main == null)
            {
                GameObject camera = new GameObject();
                camera.name      = "RTE SceneView Camera";
                sceneView.Camera = camera.AddComponent <Camera>();
            }
            else
            {
                sceneView.Camera = Camera.main;
            }

            if (RenderPipelineInfo.Type == RPType.Standard)
            {
                scene.AddComponent <RTEGraphicsLayer>();
            }

            EventSystem eventSystem = FindObjectOfType <EventSystem>();

            if (eventSystem == null)
            {
                eventSystem = editor.AddComponent <EventSystem>();
                if (IsVR)
                {
                    //
                }
                else
                {
                    editor.AddComponent <StandaloneInputModule>();
                }
            }

            RectTransform rectTransform = sceneView.GetComponent <RectTransform>();

            if (rectTransform != null)
            {
                RectTransform parentTransform = rectTransform.parent as RectTransform;
                if (parentTransform != null)
                {
                    rectTransform.anchorMin = new Vector2(0, 0);
                    rectTransform.anchorMax = new Vector2(1, 1);
                    // rectTransform.pivot = new Vector2(0.5f, 0.5f);
                    rectTransform.pivot     = new Vector2(0.0f, 0.0f);
                    rectTransform.offsetMax = new Vector2(0, 0);
                    rectTransform.offsetMin = new Vector2(0, 0);
                }
            }

            m_uiRaycaster = ui.AddComponent <RTEUIRaycaster>();
            m_eventSystem = eventSystem;
        }