C# 如何在单击按钮后禁用它。换句话说,有一个按钮只能点击一次

C# 如何在单击按钮后禁用它。换句话说,有一个按钮只能点击一次,c#,unity3d,C#,Unity3d,我正在为我正在制作的游戏制作一个升级按钮,显然我只想升级一次,我该如何编写代码 我在互联网上四处寻找,每个人都建议尝试以下方法: gameObject.GetComponent().Interactiable=false 或 UpgradeButton.Interactiable=false 或者类似的东西。但是,这会导致按钮从一开始就处于非活动状态。我希望只需单击一下,它就处于非活动状态 有人知道怎么解决这个问题吗 提前谢谢 通过按钮的onClick方法设置属性(您可能也希望在该方法中设置升级

我正在为我正在制作的游戏制作一个升级按钮,显然我只想升级一次,我该如何编写代码

我在互联网上四处寻找,每个人都建议尝试以下方法:

gameObject.GetComponent().Interactiable=false

UpgradeButton.Interactiable=false

或者类似的东西。但是,这会导致按钮从一开始就处于非活动状态。我希望只需单击一下,它就处于非活动状态

有人知道怎么解决这个问题吗


提前谢谢

通过按钮的
onClick
方法设置属性(您可能也希望在该方法中设置升级代码)

使用UnityEngine;
使用UnityEngine.UI;
使用系统集合;
公共类点击示例:MonoBehavior{
公共按钮你的按钮;
无效开始(){
Button btn=yourButton.GetComponent();
btn.onClick.AddListener(TaskOnClick);
}
void TaskOnClick(){
Log(“您已经单击了按钮!”);
yourButton.interactiable=false;
}
}

(from)

要使按钮处于非活动状态,需要以下代码行:

btn.interactable = false;
但是,从一个场景移动到另一个场景,所有内容都将重置。因此,您需要保存它的状态。最简单的方法是使用PlayerRefs:

PlayerPrefs.GetInt("buttonState");
PlayerPrefs.SetInt("buttonState",0);
if(PlayerPrefs.HasKey("buttonState"))
最终的代码如下所示:

using UnityEngine;
using UnityEngine.UI;
using System.Collections;

public class ClickExample : MonoBehaviour {
    public Button btn;
    void Start()
    {
        if (PlayerPrefs.HasKey("buttonState")) // if the button was saved in memory
        {
           if(PlayerPrefs.GetInt("buttonState") == 0) //if the value is 0
               btn.interactable = false; // make button disabled
        }
        else
        {
             PlayerPrefs.SetInt("buttonState",1); // saving in memory that button is on
        }

    }

    public void buttonCliked(){
        btn.interactable = false; // making the button disabled
        PlayerPrefs.SetInt("buttonState",0); //saving in memory that button is off 
    }

}
  • 将此代码添加到一个空的游戏对象,然后转到您的按钮=> 按钮脚本=>OnClick
  • 按下小+符号并分配您的空游戏对象(您使用脚本的对象)
  • 从列表中选择按钮
请在此处阅读有关PlayerRefs的更多信息:

是否可以从按钮单击事件内部调用此方法/设置属性?是否尝试设置
UpgradeButton.interactiable=false在按钮中单击事件?您在哪里调用
。可交互
?您是否在
Start()
中执行此操作?您知道如何禁用按钮,并且知道如何编写在单击按钮时执行的代码。把2和2放在一起,你有一个按钮,当你点击它时,它被禁用。我不知道我们还可以提供什么信息。Draco18s,是的,它在开始()谢谢,我会试试这个,我把它放在脚本的什么地方有关系吗?它现在可以工作了,按钮在单击一次后停止活动。现在的问题是,当我切换到另一个场景并返回时,按钮再次变为活动状态。有什么可能的解决方案吗?您需要在场景加载上存储一个变量(如
didPerformUpgrade
)。以下列出了实现这一目标的一些可能性:
using UnityEngine;
using UnityEngine.UI;
using System.Collections;

public class ClickExample : MonoBehaviour {
    public Button btn;
    void Start()
    {
        if (PlayerPrefs.HasKey("buttonState")) // if the button was saved in memory
        {
           if(PlayerPrefs.GetInt("buttonState") == 0) //if the value is 0
               btn.interactable = false; // make button disabled
        }
        else
        {
             PlayerPrefs.SetInt("buttonState",1); // saving in memory that button is on
        }

    }

    public void buttonCliked(){
        btn.interactable = false; // making the button disabled
        PlayerPrefs.SetInt("buttonState",0); //saving in memory that button is off 
    }

}