using System; using UnityEngine; /// Global mouse look-around sensitivity multiplier, shared by every camera /// controller (FreeCam, FirstPerson, ThirdPersonOrbit). 1 = unchanged baseline. /// Persisted per-machine via PlayerPrefs so the setting survives restarts. public static class MouseSensitivity { public const float Default = 1f; public const float Min = 0.1f; public const float Max = 4f; const string PrefKey = "Settings.MouseSensitivity"; static bool _loaded; static float _multiplier = Default; /// Fires whenever the multiplier changes (UI may run before the avatar spawns). public static event Action Changed; public static float Multiplier { get { if (!_loaded) { _loaded = true; _multiplier = Mathf.Clamp(PlayerPrefs.GetFloat(PrefKey, Default), Min, Max); } return _multiplier; } set { float v = Mathf.Clamp(value, Min, Max); _loaded = true; if (Mathf.Approximately(v, _multiplier)) return; _multiplier = v; PlayerPrefs.SetFloat(PrefKey, v); // Flush to disk now so the setting survives a hard kill (build), not // only a clean quit. Settings changes are rare user actions, so the // extra write is negligible. PlayerPrefs.Save(); Changed?.Invoke(v); } } }