private void Update() { // Context switch was requested // To ensure we do not switch controllers in the middle of the frame we only update the // controller at the beginning of the frame. Controller change requests made in the middle // of the frame will only affect the m_NewController. if (m_NewController != null) { m_controller = m_NewController; m_NewController = null; } RotateView(); RaycastHit HitInfo; int NotPlayerMask = ~(1 << LayerMask.NameToLayer("PlayerCharacter")); if (Physics.Raycast(m_Camera.transform.position, m_Camera.transform.forward, out HitInfo, 10.0f, NotPlayerMask)) { GuiOutput.DisplayDebugDistanceMessage("" + ((RaycastHit)HitInfo).distance); m_WasHovering = true; GameObject NewTarget = HitInfo.collider.gameObject; if (NewTarget == m_PreviousTarget) { m_HoverTime += Time.deltaTime; m_controller.OnHover(m_HoverTime); } else { m_HoverTime = 0.0f; m_controller.OnTargetChange(HitInfo); } m_PreviousTarget = NewTarget; } else if (m_WasHovering) { m_WasHovering = false; m_PreviousTarget = null; m_controller.OnTargetChange(null); } if (!m_MouseDown) { m_MouseDown = Input.GetMouseButtonDown(0); m_HoldTime = 0.0f; } else if (Input.GetMouseButtonUp(0)) { m_MouseDown = false; if (m_HoldTime < m_ClickSensitivity) { m_controller.OnClick(); } else { m_controller.OnRelease(m_HoldTime); } } else { m_HoldTime += Time.deltaTime; if (m_HoldTime > m_ClickSensitivity) { m_controller.OnHold(m_HoldTime); } } }