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

Unity按钮首次点击后永久禁用:现有脚本状态持久化问题

实现按钮首次点击后禁用(按需选择会话内/永久禁用)

问题分析

当前脚本通过PlayerPrefs将禁用状态持久化存储,导致重启游戏后按钮依然保持禁用。如果你的需求是仅在当前游戏运行期间首次点击后禁用,重启游戏恢复可用,需移除持久化逻辑;若需要跨会话永久禁用,当前脚本的核心逻辑正确,但存在执行顺序问题导致首次启动状态恢复异常。


方案1:当前会话内首次点击后禁用(重启游戏恢复)

移除所有持久化相关代码,仅用内存变量记录状态:

using UnityEngine;
using UnityEngine.UI;

public class ButtonOff : MonoBehaviour
{
    private Button button;
    private bool isButtonClicked = false;

    private void Awake()
    {
        button = GetComponent<Button>();
        button.onClick.AddListener(DisableButtonOnClick);
    }

    private void DisableButtonOnClick()
    {
        if (!isButtonClicked)
        {
            isButtonClicked = true;
            button.interactable = false;
        }
    }
}

修改说明

  • 删除静态变量buttonDisabled,避免跨场景的状态残留(无需跨场景保持禁用则不需要静态变量)
  • 移除PlayerPrefs读写逻辑,不再将状态保存到本地文件
  • 用isButtonClicked变量仅记录当前游戏会话内的点击状态,游戏重启后该变量会自动重置为false

方案2:跨会话永久禁用(首次点击后重启游戏依然禁用)

调整代码执行顺序,确保先读取持久化状态再更新按钮状态:

using UnityEngine;
using UnityEngine.UI;

public class ButtonOff : MonoBehaviour
{
    private static bool buttonDisabled = false;
    private Button button;

    private void Awake()
    {
        button = GetComponent<Button>();
        button.onClick.AddListener(DisableButtonOnClick);
    }

    private void Start()
    {
        // 先从本地读取持久化状态
        int buttonDisabledValue = PlayerPrefs.GetInt("ButtonDisabled", 0);
        buttonDisabled = buttonDisabledValue == 1;
        // 根据读取到的状态设置按钮可用性
        if (buttonDisabled)
        {
            button.interactable = false;
        }
    }

    private void OnDisable()
    {
        PlayerPrefs.SetInt("ButtonDisabled", buttonDisabled ? 1 : 0);
        PlayerPrefs.Save();
    }

    private void DisableButtonOnClick()
    {
        buttonDisabled = true;
        button.interactable = false;
    }
}

修改说明

  • 将按钮状态设置逻辑从Awake移到Start,确保先完成PlayerPrefs的状态读取,再更新按钮状态
  • 移除未使用的buttonClicked变量,精简代码结构

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 09:55:37