void UpdateReticle(GameObject previousGazedObject) { if (gazePointer == null) { return; } Camera camera = pointerData.enterEventCamera; // Get the camera GameObject gazeObject = GetCurrentGameObject(); // Get the gaze target Vector3 intersectionPosition = GetIntersectionPosition(); bool isInteractive = pointerData.pointerPress != null || ExecuteEvents.GetEventHandler <IPointerClickHandler>(gazeObject) != null; if (gazeObject == previousGazedObject) { if (gazeObject != null) { gazePointer.OnGazeStay(camera, gazeObject, intersectionPosition, isInteractive); } } else { if (previousGazedObject != null) { gazePointer.OnGazeExit(camera, previousGazedObject); } if (gazeObject != null) { gazePointer.OnGazeStart(camera, gazeObject, intersectionPosition, isInteractive); } } }
private void HandleGaze() { // Retrieve GazePointer radius. float innerRadius = 0.0f; float outerRadius = 0.0f; if (pointer != null) { pointer.GetPointerRadius(out innerRadius, out outerRadius); } // Find what object the user is looking at. Vector3 intersectPosition; IGvrGazeResponder target = null; GameObject targetObject = FindGazeTarget(innerRadius, out target, out intersectPosition); // Found a target? if (targetObject != null) { lastIntersectPosition = intersectPosition; // Is the object new? if (targetObject != currentGazeObject) { if (pointer != null) { pointer.OnGazeExit(cam, currentGazeObject); } if (currentTarget != null) { // Replace with current object. currentTarget.OnGazeExit(); } // Save new object. currentTarget = target; currentGazeObject = targetObject; // Inform pointer and target of gaze. if (pointer != null) { pointer.OnGazeStart(cam, currentGazeObject, intersectPosition, currentTarget != null); } if (currentTarget != null) { currentTarget.OnGazeEnter(); } } else { // Same object, inform pointer of new intersection. if (pointer != null) { pointer.OnGazeStay(cam, currentGazeObject, intersectPosition, currentTarget != null); } } } else { // Failed to find an object by inner radius. if (currentGazeObject != null) { // Already gazing an object? Check against outer radius. if (IsGazeNearObject(outerRadius, currentGazeObject, out intersectPosition)) { // Still gazing. if (pointer != null) { pointer.OnGazeStay(cam, currentGazeObject, intersectPosition, currentTarget != null); } } else { // No longer gazing any object. if (pointer != null) { pointer.OnGazeExit(cam, currentGazeObject); } if (currentTarget != null) { currentTarget.OnGazeExit(); } currentTarget = null; currentGazeObject = null; } } } }
public void OnGazeStay(Camera camera, GameObject targetObject, Vector3 intersectionPosition, bool isInteractive) { GazePointer.OnGazeStay(camera, targetObject, intersectionPosition, isInteractive); }