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