Esempio n. 1
0
        public void CaptureFocus()
        {
            // Get a focus position data entry from the pool.
            FocusPosition focusPosition = focusManager.GetPooledData <FocusPosition>();

            Ray        cameraRay = new Ray(mainCamera.transform.position, mainCamera.transform.forward);
            RaycastHit hit;

            if (Physics.Raycast(cameraRay, out hit))
            {
                // This sample uses a LexiconSelectable component to determine object selectability.
                // You could just as easily use layers, tags, or your own scripts.
                LexiconSelectable selectable = hit.collider.gameObject.GetComponentInParent <LexiconSelectable>();
                if (selectable != null)
                {
                    FocusSelection focusSelection = focusManager.GetPooledData <FocusSelection>();
                    focusSelection.SelectedObject = selectable.gameObject;
                    focusManager.AddFocusData(focusSelection);
                }

                // Set the focus position to the hit point if present.
                focusPosition.Position = hit.point;
                focusPosition.Normal   = hit.normal;
            }
            else
            {
                // Set the focus position in front of the camera if no hit point.
                focusPosition.Position = mainCamera.transform.position + mainCamera.transform.forward * 2.0f;
                focusPosition.Normal   = -mainCamera.transform.forward;
            }

            // Add our focus position data entry.
            focusManager.AddFocusData(focusPosition);

            // Update the pointer position.
            pointerSphere.transform.position = focusPosition.Position;
            float dist  = Vector3.Distance(focusPosition.Position, mainCamera.transform.position);
            float scale = pointerSize * dist;

            pointerSphere.transform.localScale = new Vector3(scale, scale, scale);

            // Add a dwell position entry if the user's gaze is lingering on a spot.
            float speed = Vector3.Magnitude(lastPosition - focusPosition.Position) / Time.deltaTime;

            if (speed < dwellSpeed)
            {
                FocusDwellPosition dwellPosition = focusManager.GetPooledData <FocusDwellPosition>();
                dwellPosition.Position = focusPosition.Position;
                dwellPosition.Normal   = focusPosition.Normal;
                focusManager.AddFocusData(dwellPosition);
            }

            lastPosition = focusPosition.Position;
        }
Esempio n. 2
0
        public void CaptureFocus()
        {
            // Get a focus position data entry from the pool.
            FocusPosition focusPosition = focusManager.GetPooledData <FocusPosition>();

            Ray        pointerRay = mainCamera.ScreenPointToRay(Input.mousePosition);
            RaycastHit hit;

            if (Physics.Raycast(pointerRay, out hit))
            {
                // This sample uses a LexiconSelectable component to determine object selectability.
                // You could just as easily use layers, tags, or your own scripts.
                LexiconSelectable selectable = hit.collider.gameObject.GetComponentInParent <LexiconSelectable>();
                if (selectable != null)
                {
                    FocusSelection focusSelection = focusManager.GetPooledData <FocusSelection>();
                    focusSelection.SelectedObject = selectable.gameObject;
                    focusManager.AddFocusData(focusSelection);
                }

                // Set the focus position to the hit point if present.
                focusPosition.Position = hit.point;
                focusPosition.Normal   = hit.normal;
            }
            else
            {
                // Set the focus position in front of the mouse if no hit point.
                focusPosition.Position = pointerRay.GetPoint(1.5f);
                focusPosition.Normal   = -pointerRay.direction;
            }

            // Add our focus position data entry.
            focusManager.AddFocusData(focusPosition);

            // Add a dwell position entry if the mouse is lingering on a spot.
            float speed = Vector3.Magnitude(lastPosition - focusPosition.Position) / Time.deltaTime;

            if (speed < dwellSpeed)
            {
                FocusDwellPosition dwellPosition = focusManager.GetPooledData <FocusDwellPosition>();
                dwellPosition.Position = focusPosition.Position;
                dwellPosition.Normal   = focusPosition.Normal;
                focusManager.AddFocusData(dwellPosition);
            }

            lastPosition = focusPosition.Position;
        }