private void RestoreDefaults()
    {
        // Stereo Members
        m_isStereoEnabled = true;
        m_areEyesSwapped = false;

        m_interPupillaryDistance = 0.06f;
        m_stereoLevel = 1.0f;
        m_worldScale = 1.0f;
        m_fieldOfViewScale = 1.0f;
        m_zeroParallaxOffset = 0.0f;
        m_nearClip = 0.1f;
        m_farClip = 100000.0f;

        // Tracker Members
        m_isHeadTrackingEnabled = true;
        m_headTrackingScale = 1.0f;

        m_isStylusTrackingEnabled = true;
        m_isStylusVisualizationEnabled = true;

        m_isMouseEmulationEnabled = false;
        m_mouseEmulationDistance = 1.0f;

        m_isStylusLedEnabled = false;
        m_stylusLedColor = ZSCore.StylusLedColor.White;

        m_isStylusVibrationEnabled = false;
        m_stylusVibrationOnPeriod = 0.0f;
        m_stylusVibrationOffPeriod = 0.0f;
        m_stylusVibrationRepeatCount = 0;
        m_startStylusVibration = false;
        m_stopStylusVibration = false;
    }
    public void Awake()
    {
        m_isStereoEnabled = EditorPrefs.GetBool("IsStereoEnabled", true);
        m_areEyesSwapped = EditorPrefs.GetBool("AreEyesSwapped", false);

        m_interPupillaryDistance = EditorPrefs.GetFloat("InterPupillaryDistance", 0.06f);
        m_stereoLevel = EditorPrefs.GetFloat("StereoLevel", 1.0f);
        m_worldScale = EditorPrefs.GetFloat("WorldScale", 1.0f);
        m_fieldOfViewScale = EditorPrefs.GetFloat("FieldOfViewScale", 1.0f);
        m_zeroParallaxOffset = EditorPrefs.GetFloat("ZeroParallaxOffset", 0.0f);
        m_nearClip = EditorPrefs.GetFloat("NearClip", 0.1f);
        m_farClip = EditorPrefs.GetFloat("FarClip", 100000.0f);

        m_isHeadTrackingEnabled = EditorPrefs.GetBool("IsHeadTrackingEnabled", true);
        m_headTrackingScale = EditorPrefs.GetFloat("HeadTrackingScale", 1.0f);

        m_isStylusTrackingEnabled = EditorPrefs.GetBool("IsStylusTrackingEnabled", true);
        m_isStylusVisualizationEnabled = EditorPrefs.GetBool("IsStylusVisualizationEnabled", true);

        m_isMouseEmulationEnabled = EditorPrefs.GetBool("IsMouseEmulationEnabled", false);
        m_mouseEmulationDistance = EditorPrefs.GetFloat("MouseEmulationDistance", 1.0f);

        m_isStylusLedEnabled = EditorPrefs.GetBool("IsStylusLedEnabled", false);
        m_stylusLedColor = (ZSCore.StylusLedColor)EditorPrefs.GetInt("StylusLedColor", (int)ZSCore.StylusLedColor.White);

        m_isStylusVibrationEnabled = EditorPrefs.GetBool("IsStylusVibrationEnabled", false);
        m_stylusVibrationOnPeriod = EditorPrefs.GetFloat("StylusVibrationOnPeriod", 0.0f);
        m_stylusVibrationOffPeriod = EditorPrefs.GetFloat("StylusVibrationOffPeriod", 0.0f);
        m_stylusVibrationRepeatCount = EditorPrefs.GetInt("StylusVibrationRepeatCount", 0);
        m_startStylusVibration = EditorPrefs.GetBool("StartStylusVibration", false);
        m_stopStylusVibration = EditorPrefs.GetBool("StopStylusVibration", false);
    }
    void OnGUI()
    {
        m_scrollPosition = EditorGUILayout.BeginScrollView(m_scrollPosition, GUILayout.Width(position.width), GUILayout.Height(position.height));

        if (GUILayout.Button("Restore Defaults", GUILayout.Width(118), GUILayout.Height(20)))
          RestoreDefaults();

        GUILayout.Label("\nStereo Settings:", EditorStyles.boldLabel);

        m_isStereoEnabled = EditorGUILayout.Toggle("Enable Stereo", m_isStereoEnabled);
        m_areEyesSwapped = EditorGUILayout.Toggle("Swap Eyes", m_areEyesSwapped);

        m_interPupillaryDistance = EditorGUILayout.Slider("Inter Pupillary Distance", m_interPupillaryDistance, 0, 1);
        m_stereoLevel = EditorGUILayout.Slider("Stereo Level", m_stereoLevel, 0, 1);
        m_worldScale = EditorGUILayout.Slider("World Scale", m_worldScale, 0.0001f, 1000f);
        m_fieldOfViewScale = EditorGUILayout.Slider("Field of View Scale", m_fieldOfViewScale, 0, 100);
        m_zeroParallaxOffset = EditorGUILayout.Slider("Zero Parallax Offset", m_zeroParallaxOffset, -10, 10);
        m_nearClip = EditorGUILayout.Slider("Near Clip", m_nearClip, 0, 1000);
        m_farClip = EditorGUILayout.Slider("Far Clip", m_farClip, 0, 100000);

        GUILayout.Label("\nHead Tracker Settings:", EditorStyles.boldLabel);

        m_isHeadTrackingEnabled = EditorGUILayout.Toggle("Enable Head Tracking", m_isHeadTrackingEnabled);
        m_headTrackingScale = EditorGUILayout.Slider("Head Tracking Scale", m_headTrackingScale, 0, 1000);

        GUILayout.Label("\nStylus Tracker Settings:", EditorStyles.boldLabel);
        m_isStylusTrackingEnabled = EditorGUILayout.Toggle("Enable Stylus Tracking", m_isStylusTrackingEnabled);
        m_isStylusVisualizationEnabled = EditorGUILayout.Toggle("Enable Stylus Visualization", m_isStylusVisualizationEnabled);

        GUILayout.Label("\nStylus LED Settings:", EditorStyles.boldLabel);
        m_isStylusLedEnabled = EditorGUILayout.Toggle("Enable Stylus LED", m_isStylusLedEnabled);
        m_stylusLedColor = (ZSCore.StylusLedColor)EditorGUILayout.EnumPopup("Stylus Led Color", m_stylusLedColor);

        GUILayout.Label("\nStylus Vibration Settings:", EditorStyles.boldLabel);
        m_isStylusVibrationEnabled = EditorGUILayout.Toggle("Enable Stylus Vibration", m_isStylusVibrationEnabled);
        m_stylusVibrationOnPeriod = EditorGUILayout.Slider("Vibration On Period", m_stylusVibrationOnPeriod, 0, 100);
        m_stylusVibrationOffPeriod = EditorGUILayout.Slider("Vibration Off Period", m_stylusVibrationOffPeriod, 0, 100);
        m_stylusVibrationRepeatCount = EditorGUILayout.IntSlider("Vibration Repeat Count", m_stylusVibrationRepeatCount, 0, 100);
        m_startStylusVibration = EditorGUILayout.Toggle("Start Vibration", m_startStylusVibration);
        m_stopStylusVibration = EditorGUILayout.Toggle("Stop Vibration", m_stopStylusVibration);

        GUILayout.Label("\nMouse Emulation:", EditorStyles.boldLabel);
        m_isMouseEmulationEnabled = EditorGUILayout.Toggle("Enable Mouse Emulation", m_isMouseEmulationEnabled);
        m_mouseEmulationDistance = EditorGUILayout.Slider("Emulation Distance", m_mouseEmulationDistance, 0, 5);

        GUILayout.Label("\nDisplay Information (read only):", EditorStyles.boldLabel);
        m_displayOffset = EditorGUILayout.Vector3Field("Display Offset", m_displayOffset);
        m_displayPosition = EditorGUILayout.Vector2Field("Display Position", m_displayPosition);
        m_displayAngle = EditorGUILayout.Vector2Field("Display Angle", m_displayAngle);
        m_displayResolution = EditorGUILayout.Vector2Field("Display Resolution", m_displayResolution);
        m_displaySize = EditorGUILayout.Vector2Field("Display Size", m_displaySize);

        GUILayout.Label("\nHead Tracker Information (read only):", EditorStyles.boldLabel);
        m_headPosition = EditorGUILayout.Vector3Field("Position (tracker space)", m_headPosition);
        m_headDirection = EditorGUILayout.Vector3Field("Direction (tracker space)", m_headDirection);
        m_headCameraPosition = EditorGUILayout.Vector3Field("Position (camera space)", m_headCameraPosition);
        m_headCameraDirection = EditorGUILayout.Vector3Field("Direction (camera space)", m_headCameraDirection);
        m_headWorldPosition = EditorGUILayout.Vector3Field("Position (world space)", m_headWorldPosition);
        m_headWorldDirection = EditorGUILayout.Vector3Field("Direction (world space)", m_headWorldDirection);

        GUILayout.Label("\nStylus Tracker Information (read only):", EditorStyles.boldLabel);
        m_stylusPosition = EditorGUILayout.Vector3Field("Position (tracker space)", m_stylusPosition);
        m_stylusDirection = EditorGUILayout.Vector3Field("Direction (tracker space)", m_stylusDirection);
        m_stylusCameraPosition = EditorGUILayout.Vector3Field("Position (camera space)", m_stylusCameraPosition);
        m_stylusCameraDirection = EditorGUILayout.Vector3Field("Direction (camera space)", m_stylusCameraDirection);
        m_stylusWorldPosition = EditorGUILayout.Vector3Field("Position (world space)", m_stylusWorldPosition);
        m_stylusWorldDirection = EditorGUILayout.Vector3Field("Direction (world space)", m_stylusWorldDirection);

        m_isStylusButton0Pressed = EditorGUILayout.Toggle("Button 0 Pressed", m_isStylusButton0Pressed);
        m_isStylusButton1Pressed = EditorGUILayout.Toggle("Button 1 Pressed", m_isStylusButton1Pressed);
        m_isStylusButton2Pressed = EditorGUILayout.Toggle("Button 2 Pressed", m_isStylusButton2Pressed);

        EditorGUILayout.EndScrollView();
    }