Пример #1
0
    private void DeactiveLastInteractible()
    {
        if (m_LastInteractible == null)
        {
            return;
        }

        m_LastInteractible.Out();
        m_LastInteractible = null;
        if (OnRaycastOut != null)
        {
            OnRaycastOut.Invoke();
        }
    }
Пример #2
0
    private void EyeRaycast()
    {
        // Show the debug ray if required
        if (m_ShowDebugRay)
        {
            Debug.DrawRay(m_Camera.position, m_Camera.forward * m_DebugRayLength, Color.blue, m_DebugRayDuration);
        }

        // Create a ray that points forwards from the camera.

        Ray        ray = new Ray(m_Camera.position, m_Camera.forward);
        RaycastHit hit;

        // Do the raycast forweards to see if we hit an interactive item
        if (Physics.Raycast(ray, out hit, m_RayLength, ~m_ExclusionLayers))
        {
            _camerFrontPivot.ry = false;
            VRInteractiveItem interactible = hit.collider.GetComponent <VRInteractiveItem>();    //attempt to get the VRInteractiveItem on the hit object
            m_CurrentInteractible = interactible;
            // If we hit an interactive item and it's not the same as the last interactive item, then call Over
            if (interactible && interactible != m_LastInteractible)
            {
                interactible.Over();
            }

            // Deactive the last interactive item
            if (interactible != m_LastInteractible)
            {
                DeactiveLastInteractible();
            }

            m_LastInteractible = interactible;

            // Something was hit, set at the hit position.
            if (m_Reticle)
            {
                m_Reticle.SetPosition(hit);
            }

            if (OnRaycasthit != null)
            {
                OnRaycasthit(hit);
            }
            else
            if (OnRaycastOut != null)
            {
                OnRaycastOut.Invoke();
            }
        }
        else
        {
            _camerFrontPivot.ry = true;
            // Nothing was hit, deactive the last interactive item.
            DeactiveLastInteractible();
            m_CurrentInteractible = null;

            // Position the reticle at default distance.
            if (m_Reticle && controllerTransform == null)
            {
                m_Reticle.SetPosition();
            }
        }
    }