protected virtual void Start()
        {
            if (IsVR)
            {
                IVRTracker tracker = IOC.Resolve <IVRTracker>();
                m_input = new InputLowVR(tracker);
            }
            else
            {
                m_input = new InputLow();
            }
            SetInput();

            if (GetComponent <RTEBaseInput>() == null)
            {
                gameObject.AddComponent <RTEBaseInput>();
            }

            if (m_eventSystem == null)
            {
                m_eventSystem = FindObjectOfType <EventSystem>();
                if (m_eventSystem == null)
                {
                    GameObject eventSystem = new GameObject("EventSystem");
                    eventSystem.transform.SetParent(transform, false);
                    m_eventSystem = eventSystem.AddComponent <EventSystem>();
                    eventSystem.AddComponent <StandaloneInputModule>();
                }
            }

            if (m_object == null)
            {
                m_object = gameObject.AddComponent <RuntimeObjects>();
            }
        }
        protected virtual void Awake()
        {
            if (m_instance != null)
            {
                Debug.LogWarning("Another instance of RTE exists");
                return;
            }
            if (m_useBuiltinUndo)
            {
                m_undo = new RuntimeUndo(this);
            }
            else
            {
                m_undo = new DisabledUndo();
            }

            if (m_raycaster == null)
            {
                m_raycaster = GetComponent <GraphicRaycaster>();
            }



            IsVR        = UnityEngine.XR.XRDevice.isPresent && m_enableVRIfAvailable;
            m_selection = new RuntimeSelection(this);
            m_dragDrop  = new DragDrop(this);
            m_object    = new ExposeToEditorEvents(this);

            if (IsVR)
            {
                m_input = new InputLowVR();
            }
            else
            {
                m_input = new InputLow();
            }

            m_instance = this;

            bool isOpened = m_isOpened;

            m_isOpened = !isOpened;
            IsOpened   = isOpened;
        }