protected virtual void Start()
        {
            VRRecenterCtrl plusZ  = InitCtrl();
            VRRecenterCtrl minusZ = InitCtrl();
            VRRecenterCtrl plusY  = InitCtrl();
            VRRecenterCtrl minusY = InitCtrl();
            VRRecenterCtrl plusX  = InitCtrl();
            VRRecenterCtrl minusX = InitCtrl();

            plusZ.transform.position = Vector3.forward * m_uiDistance;
            plusZ.Text = "+Z";

            minusZ.transform.position = Vector3.back * m_uiDistance;
            minusZ.transform.rotation = Quaternion.LookRotation(Vector3.back);
            minusZ.Text = "-Z";

            plusY.transform.position = Vector3.up * m_uiDistance;
            plusY.transform.rotation = Quaternion.LookRotation(Vector3.up);
            plusY.Text = "+Y";

            minusY.transform.position = Vector3.down * m_uiDistance;
            minusY.transform.rotation = Quaternion.LookRotation(Vector3.down);
            minusY.Text = "-Y";

            plusX.transform.position = Vector3.right * m_uiDistance;
            plusX.transform.rotation = Quaternion.LookRotation(Vector3.right);
            plusX.Text = "+X";

            minusX.transform.position = Vector3.left * m_uiDistance;
            minusX.transform.rotation = Quaternion.LookRotation(Vector3.left);
            minusX.Text = "-X";
        }
        private Quaternion GetRotation(object sender)
        {
            VRRecenterCtrl ctrl     = (VRRecenterCtrl)sender;
            Quaternion     rotation = Quaternion.LookRotation((ctrl.transform.position - transform.position).normalized);

            return(rotation);
        }
        private Quaternion GetRotation(object sender, Vector3 vector)
        {
            VRRecenterCtrl ctrl     = (VRRecenterCtrl)sender;
            Quaternion     rotation = Quaternion.LookRotation((ctrl.transform.position - transform.position).normalized);

            Matrix4x4 matrix = Matrix4x4.TRS(Vector3.zero, rotation, Vector3.one);

            vector   = matrix.MultiplyVector(vector);
            rotation = Quaternion.LookRotation(vector);
            return(rotation);
        }
        private VRRecenterCtrl InitCtrl()
        {
            VRRecenterCtrl ctrl   = Instantiate(m_recenterCtrlPrefab, transform);
            Canvas         canvas = ctrl.GetComponentInChildren <Canvas>();

            if (canvas != null && Component.Window != null)
            {
                canvas.worldCamera = Component.Window.Camera;
            }
            ctrl.name      = "Ctrl";
            ctrl.Recenter += OnRecenter;
            ctrl.Up       += OnUp;
            ctrl.Down     += OnDown;
            ctrl.Left     += OnLeft;
            ctrl.Right    += OnRight;
            return(ctrl);
        }