protected virtual void LateUpdate()
    {
        if (!NRInput.LaserVisualActive)
        {
            meshRenderer.enabled = false;
            return;
        }
        meshRenderer.enabled = true;
        Vector3 laserPoint;

        if (SelectedObject == null)
        {
            RaycastResult hit = m_Raycaster.FirstRaycastResult();
            if (hit.isValid)
            {
                float dist = (hit.worldPosition - m_Raycaster.transform.position).magnitude;
                //距离越近,乘以系数越接近1,越远越接近0.3
                dist      *= Math.Max(0.2f, (0.8f - 0.02f * dist));
                laserPoint = GetPointAlongPointer(dist);
            }
            else
            {
                laserPoint = m_Raycaster.transform.position + m_Raycaster.transform.forward * defaultDistance;
            }
        }
        else
        {
            float dist = (SelectedObject.position - m_Raycaster.transform.position).magnitude;
            laserPoint = GetPointAlongPointer(dist);
        }
        SetReticlePoint(laserPoint);
        UpdateVisual();
    }
Exemple #2
0
    public static GameObject GetCurrentRaycastTarget()
    {
        NRPointerRaycaster raycaster = GetRaycaster(NRInput.DomainHand);

        if (raycaster == null)
        {
            return(null);
        }
        var result = raycaster.FirstRaycastResult();

        if (!result.isValid)
        {
            return(null);
        }
        return(result.gameObject);
    }