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; }
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; }