void OnDestroy() { if (EyeTracker.Active) { EyeTracker.Stop(); } }
public override void OnInspectorGUI() { base.DrawDefaultInspector(); eyeTracker = ((PimaxEyeTracker)target).EyeTracker; if (eyeTracker == null) { return; } if (eyeTracker.Active) { Action DrawEyePreview = () => { var eyePreviewSize = 200.0f; var eyeBlinkPreviewHeight = 50.0f; var eyeSize = 20.0f; GUILayout.BeginHorizontal(); Rect rtBackgroundLeft = GUILayoutUtility.GetRect(GUIContent.none, GUI.skin.box, GUILayout.MinWidth(eyePreviewSize + eyeSize), GUILayout.MinHeight(eyePreviewSize + eyeSize)); GUILayout.Space(80); Rect rtBackgroundRight = GUILayoutUtility.GetRect(GUIContent.none, GUI.skin.box, GUILayout.MinWidth(eyePreviewSize + eyeSize), GUILayout.MinHeight(eyePreviewSize + eyeSize)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); Rect rtBlinkBackgroundLeft = GUILayoutUtility.GetRect(GUIContent.none, GUI.skin.box, GUILayout.MinWidth(eyePreviewSize + eyeSize), GUILayout.MinHeight(eyeBlinkPreviewHeight)); GUILayout.Space(80); Rect rtBlinkBackgroundRight = GUILayoutUtility.GetRect(GUIContent.none, GUI.skin.box, GUILayout.MinWidth(eyePreviewSize + eyeSize), GUILayout.MinHeight(eyeBlinkPreviewHeight)); GUILayout.EndHorizontal(); Rect rtEyeLeft = new Rect(rtBackgroundLeft.x + (Mathf.InverseLerp(-1.0f, 1.0f, eyeTracker.LeftEye.Expression.PupilCenter.x) * eyePreviewSize), rtBackgroundLeft.y + (Mathf.InverseLerp(-1.0f, 1.0f, -eyeTracker.LeftEye.Expression.PupilCenter.y) * eyePreviewSize), 20, 20); Rect rtEyeRight = new Rect(rtBackgroundRight.x + (Mathf.InverseLerp(-1.0f, 1.0f, eyeTracker.RightEye.Expression.PupilCenter.x) * eyePreviewSize), rtBackgroundRight.y + (Mathf.InverseLerp(-1.0f, 1.0f, -eyeTracker.RightEye.Expression.PupilCenter.y) * eyePreviewSize), 20, 20); //Rect rtEyeLeft = new Rect(rtBackgroundLeft.x + (eyeTracker.LeftEye.PupilCenter.x * eyePreviewSize), rtBackgroundLeft.y + (eyeTracker.LeftEye.PupilCenter.y * eyePreviewSize), 20, 20); //Rect rtEyeRight = new Rect(rtBackgroundRight.x + (eyeTracker.RightEye.PupilCenter.x * eyePreviewSize), rtBackgroundRight.y + (eyeTracker.RightEye.PupilCenter.y * eyePreviewSize), 20, 20); var oldColor = GUI.backgroundColor; GUI.backgroundColor = Color.white; GUI.Box(rtBackgroundLeft, ""); GUI.Box(rtBackgroundRight, ""); GUI.backgroundColor = Color.red; GUI.Box(rtEyeLeft, ""); GUI.Box(rtEyeRight, ""); if (eyeTracker.LeftEye.Expression.Openness <= 0.2f) { GUI.backgroundColor = Color.green; } else if (eyeTracker.LeftEye.Expression.Openness >= 0.8f) { GUI.backgroundColor = Color.grey; } else { GUI.backgroundColor = Color.yellow; } GUI.Box(rtBlinkBackgroundLeft, ""); if (eyeTracker.RightEye.Expression.Openness <= 0.2f) { GUI.backgroundColor = Color.green; } else if (eyeTracker.RightEye.Expression.Openness >= 0.8f) { GUI.backgroundColor = Color.grey; } else { GUI.backgroundColor = Color.yellow; } GUI.Box(rtBlinkBackgroundRight, ""); GUI.backgroundColor = oldColor; }; if (GUILayout.Button("Stop Eye Tracking")) { eyeTracker.Stop(); } EditorGUILayout.LabelField("Eye Tracking Preview", EditorStyles.boldLabel); DrawEyePreview(); EditorGUILayout.Space(); EditorGUILayout.LabelField("Expression Metrics", EditorStyles.boldLabel); EditorGUILayout.Space(); EditorGUILayout.LabelField("Pupil Center", EditorStyles.boldLabel); EditorGUILayout.Vector2Field("Left", eyeTracker.LeftEye.Expression.PupilCenter); EditorGUILayout.Vector2Field("Right", eyeTracker.RightEye.Expression.PupilCenter); EditorGUILayout.Space(); EditorGUILayout.LabelField("Blink", EditorStyles.boldLabel); EditorGUILayout.Toggle("Left", eyeTracker.LeftEye.Expression.Blink); EditorGUILayout.Toggle("Right", eyeTracker.RightEye.Expression.Blink); EditorGUILayout.Space(); EditorGUILayout.LabelField("Openness", EditorStyles.boldLabel); EditorGUILayout.FloatField("Left", eyeTracker.LeftEye.Expression.Openness); EditorGUILayout.FloatField("Right", eyeTracker.RightEye.Expression.Openness); EditorGUILayout.Space(); EditorGUILayout.LabelField("Raw Metrics", EditorStyles.boldLabel); EditorGUILayout.Space(); EditorGUILayout.TextField("Timestamp", eyeTracker.Timestamp.ToString()); EditorGUILayout.TextField("Recommended Eye", eyeTracker.RecommendedEye.Eye.ToString()); EditorGUILayout.Space(); EditorGUILayout.LabelField("Gaze", EditorStyles.boldLabel); EditorGUILayout.Vector2Field("Left", eyeTracker.LeftEye.Gaze); EditorGUILayout.Vector2Field("Right", eyeTracker.RightEye.Gaze); EditorGUILayout.Vector2Field("Recommended", eyeTracker.RecommendedEye.Gaze); EditorGUILayout.Space(); EditorGUILayout.LabelField("Gaze (Raw)", EditorStyles.boldLabel); EditorGUILayout.Vector2Field("Left", eyeTracker.LeftEye.GazeRaw); EditorGUILayout.Vector2Field("Right", eyeTracker.RightEye.GazeRaw); EditorGUILayout.Vector2Field("Recommended", eyeTracker.RecommendedEye.GazeRaw); EditorGUILayout.Space(); EditorGUILayout.LabelField("Gaze (Smooth)", EditorStyles.boldLabel); EditorGUILayout.Vector2Field("Left", eyeTracker.LeftEye.GazeSmooth); EditorGUILayout.Vector2Field("Right", eyeTracker.RightEye.GazeSmooth); EditorGUILayout.Vector2Field("Recommended", eyeTracker.RecommendedEye.GazeSmooth); EditorGUILayout.Space(); EditorGUILayout.LabelField("Gaze Origin", EditorStyles.boldLabel); EditorGUILayout.Vector3Field("Left", eyeTracker.LeftEye.GazeOrigin); EditorGUILayout.Vector3Field("Right", eyeTracker.RightEye.GazeOrigin); EditorGUILayout.Vector3Field("Recommended", eyeTracker.RecommendedEye.GazeSmooth); EditorGUILayout.Space(); EditorGUILayout.LabelField("Gaze Direction", EditorStyles.boldLabel); EditorGUILayout.Vector3Field("Left", eyeTracker.LeftEye.GazeDirection); EditorGUILayout.Vector3Field("Right", eyeTracker.RightEye.GazeDirection); EditorGUILayout.Vector3Field("Recommended", eyeTracker.RecommendedEye.GazeDirection); EditorGUILayout.Space(); EditorGUILayout.LabelField("Gaze Reliability", EditorStyles.boldLabel); EditorGUILayout.FloatField("Left", eyeTracker.LeftEye.GazeReliability); EditorGUILayout.FloatField("Right", eyeTracker.RightEye.GazeReliability); EditorGUILayout.FloatField("Recommended", eyeTracker.RecommendedEye.GazeReliability); EditorGUILayout.Space(); EditorGUILayout.LabelField("Pupil Center", EditorStyles.boldLabel); EditorGUILayout.Vector2Field("Left", eyeTracker.LeftEye.PupilCenter); EditorGUILayout.Vector2Field("Right", eyeTracker.RightEye.PupilCenter); EditorGUILayout.Vector2Field("Recommended", eyeTracker.RecommendedEye.PupilCenter); EditorGUILayout.Space(); EditorGUILayout.LabelField("Pupil Distance", EditorStyles.boldLabel); EditorGUILayout.FloatField("Left", eyeTracker.LeftEye.PupilDistance); EditorGUILayout.FloatField("Right", eyeTracker.RightEye.PupilDistance); EditorGUILayout.FloatField("Recommended", eyeTracker.RecommendedEye.PupilDistance); EditorGUILayout.Space(); EditorGUILayout.LabelField("Pupil Diameter (Major)", EditorStyles.boldLabel); EditorGUILayout.FloatField("Left", eyeTracker.LeftEye.PupilMajorDiameter); EditorGUILayout.FloatField("Right", eyeTracker.RightEye.PupilMajorDiameter); EditorGUILayout.FloatField("Recommended", eyeTracker.RecommendedEye.PupilMajorDiameter); EditorGUILayout.Space(); EditorGUILayout.LabelField("Pupil Unit Diameter (Major)", EditorStyles.boldLabel); EditorGUILayout.FloatField("Left", eyeTracker.LeftEye.PupilMajorUnitDiameter); EditorGUILayout.FloatField("Right", eyeTracker.RightEye.PupilMajorUnitDiameter); EditorGUILayout.FloatField("Recommended", eyeTracker.RecommendedEye.PupilMajorUnitDiameter); EditorGUILayout.Space(); EditorGUILayout.LabelField("Pupil Diameter (Minor)", EditorStyles.boldLabel); EditorGUILayout.FloatField("Left", eyeTracker.LeftEye.PupilMinorDiameter); EditorGUILayout.FloatField("Right", eyeTracker.RightEye.PupilMinorDiameter); EditorGUILayout.FloatField("Recommended", eyeTracker.RecommendedEye.PupilMinorDiameter); EditorGUILayout.Space(); EditorGUILayout.LabelField("Pupil Unit Diameter (Minor)", EditorStyles.boldLabel); EditorGUILayout.FloatField("Left", eyeTracker.LeftEye.PupilMinorUnitDiameter); EditorGUILayout.FloatField("Right", eyeTracker.RightEye.PupilMinorUnitDiameter); EditorGUILayout.FloatField("Recommended", eyeTracker.RecommendedEye.PupilMinorUnitDiameter); EditorGUILayout.Space(); EditorGUILayout.LabelField("Blink", EditorStyles.boldLabel); EditorGUILayout.FloatField("Left", eyeTracker.LeftEye.Blink); EditorGUILayout.FloatField("Right", eyeTracker.RightEye.Blink); EditorGUILayout.FloatField("Recommended", eyeTracker.RecommendedEye.Blink); EditorGUILayout.Space(); EditorGUILayout.LabelField("Openness", EditorStyles.boldLabel); EditorGUILayout.FloatField("Left", eyeTracker.LeftEye.Openness); EditorGUILayout.FloatField("Right", eyeTracker.RightEye.Openness); EditorGUILayout.FloatField("Recommended", eyeTracker.RecommendedEye.Openness); EditorGUILayout.Space(); EditorGUILayout.LabelField("Upper Eyelid", EditorStyles.boldLabel); EditorGUILayout.FloatField("Left", eyeTracker.LeftEye.UpperEyelid); EditorGUILayout.FloatField("Right", eyeTracker.RightEye.UpperEyelid); EditorGUILayout.FloatField("Recommended", eyeTracker.RecommendedEye.UpperEyelid); EditorGUILayout.Space(); EditorGUILayout.LabelField("Lower Eyelid", EditorStyles.boldLabel); EditorGUILayout.FloatField("Left", eyeTracker.LeftEye.LowerEyelid); EditorGUILayout.FloatField("Right", eyeTracker.RightEye.LowerEyelid); EditorGUILayout.FloatField("Recommended", eyeTracker.RecommendedEye.LowerEyelid); } else { if (GUILayout.Button("Start Eye Tracking")) { eyeTracker.Start(); } } }