You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity C# 基于PlayerPrefs的UI Toggle无尽模式开关实现异常排查

问题根因排查
  • 存储映射逻辑完全反向:GameManager初始化代码endless = PlayerPrefs.GetInt("Endless", 1) == 0;的判断规则和需求错位,存储值为1时endless判定为false,存储值为0时endless判定为true,和“无尽模式存1、计时模式存0”的设计完全相反,首次启动默认状态就不符合预期。
  • 交互响应逻辑硬伤:原OnToggleEndless方法没有把用户操作的Toggle状态同步到GameManager的endless变量,反而全程读取GameManager的旧值做存储判断;两个分支的存储逻辑完全无效:if分支存manager.endless ? 1 : 0、else分支存manager.endless ? 0 : 0,无论用户怎么操作Toggle,存储值永远基于初始状态计算,完全不会响应交互。
  • 错误的循环调用导致重复日志:将OnToggleEndless方法放入Update逐帧执行时,由于逻辑永远不更新manager的endless值,只要Toggle保持勾选状态,就会逐帧触发日志打印,且存储值始终不符合预期。
  • 事件绑定疏漏:如果在Toggle的事件槽中,未将对应脚本实例、Toggle组件正确关联,会导致交互事件完全无法触发,表现为切换Toggle无任何反应。
正确实现方案

1. 修正GameManager的配置读取逻辑

按照“无尽模式(endless=true)映射存储值1,计时模式(endless=false)映射存储值0”的规则,修正初始化代码:

// GameManager.cs 内的逻辑
void Start()
{
    // 首次启动默认开启无尽模式,存储值1对应endless为true
    endless = PlayerPrefs.GetInt("Endless", 1) == 1;
    // 保留原有跨场景不销毁的逻辑
    DontDestroyOnLoad(gameObject);
}

注意:PlayerPrefs修改后需调用PlayerPrefs.Save(),否则可能出现程序退出后配置丢失的问题。

2. 重写Toggle交互响应方法

核心逻辑要遵循“用户操作Toggle → 同步更新全局状态 → 映射为int值写入本地存储”的流程,替换原有错误的方法实现:

// 选项菜单脚本内的字段,需在Inspector面板赋值
[SerializeField] private Toggle endLessToggle;
[SerializeField] private GameManager manager;

// 直接接收Toggle传回的状态参数,避免重复读取组件状态
public void OnToggleEndless(bool isEndlessMode)
{
    // 将UI状态同步到全局GameManager
    manager.endless = isEndlessMode;
    // 布尔值映射为int值存储
    int saveValue = isEndlessMode ? 1 : 0;
    PlayerPrefs.SetInt("Endless", saveValue);
    // 强制写入本地存储
    PlayerPrefs.Save();

    Debug.Log(isEndlessMode ? "无尽模式已开启" : "计时模式已开启");
}

3. 正确完成Toggle事件绑定

  • 选中挂有Toggle组件的选项菜单对象,在Inspector面板找到Toggle组件的On Value Changed (Boolean)事件栏
  • 点击事件栏的+号新增事件槽
  • 将挂有交互脚本的游戏对象拖拽到事件槽的对象引用位置
  • 点击槽位的下拉函数列表,选择对应脚本下OnToggleEndless(bool)的带参数版本(不要选择无参数的方法重载)
  • 绑定完成后切换Toggle状态,即可正常触发逻辑、写入本地配置。

4. 补充UI状态同步逻辑

避免菜单打开时UI显示状态和本地保存的配置不一致,可在选项菜单的激活回调中主动同步Toggle状态:

void OnEnable()
{
    // 菜单打开时,用已加载的全局配置重置Toggle显示状态
    endLessToggle.isOn = manager.endless;
}

内容的提问来源于stack exchange,提问作者Marcus79

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.30 15:36:03