滑块值更改时Mouse Sensitivity未更新问题求助
解决滑块值更改时Int类型Sensitivity不更新的问题
你的代码只实现了把Sensitivity的值同步到滑块,完全没处理滑块值变化时反向更新Sensitivity的逻辑,这就是问题核心。
修正步骤:
添加滑块值变化的回调方法
新增一个方法,接收滑块的数值变化,把float类型的滑块值转为int后赋值给Sensitivity:public void OnSliderValueChanged(float sliderValue) { Sensitivity = Mathf.RoundToInt(sliderValue); }初始化加载保存的灵敏度
在Start方法里从PlayerPrefs读取之前保存的灵敏度,同时同步到滑块:private void Start() { // 读取保存的值,没有的话用默认值(比如5) Sensitivity = PlayerPrefs.GetInt("sensitivity", 5); SensitivitySlider.value = Sensitivity; }优化PlayerPrefs的保存逻辑
不要在Update里频繁调用PlayerPrefs.SetInt,这会浪费性能。建议用属性封装Sensitivity,在值变化时再保存:private int _sensitivity; public int Sensitivity { get => _sensitivity; set { _sensitivity = value; PlayerPrefs.SetInt("sensitivity", _sensitivity); PlayerPrefs.Save(); // 确保修改立即保存 } }
完整修正代码:
using UnityEngine; using UnityEngine.UI; public class SensitivityManager : MonoBehaviour { private int _sensitivity; public int Sensitivity { get => _sensitivity; set { _sensitivity = value; PlayerPrefs.SetInt("sensitivity", _sensitivity); PlayerPrefs.Save(); } } public Slider SensitivitySlider; private void Start() { Sensitivity = PlayerPrefs.GetInt("sensitivity", 5); SensitivitySlider.value = Sensitivity; } public void OnSliderValueChanged(float sliderValue) { Sensitivity = Mathf.RoundToInt(sliderValue); } }
编辑器操作补充:
在Unity编辑器中,选中挂载此脚本的物体:
- 把场景中的Slider拖到脚本的
SensitivitySlider字段上 - 选中Slider组件,找到
On Value Changed事件,点击+号 - 将脚本所在物体拖到事件的对象框中,然后选择
SensitivityManager -> OnSliderValueChanged(float)
内容的提问来源于stack exchange,提问作者PugDance
相关产品推荐
相关产品推荐

