C# 如何在单击按钮后禁用它。换句话说,有一个按钮只能点击一次
我正在为我正在制作的游戏制作一个升级按钮,显然我只想升级一次,我该如何编写代码 我在互联网上四处寻找,每个人都建议尝试以下方法: gameObject.GetComponent().Interactiable=false 或 UpgradeButton.Interactiable=false 或者类似的东西。但是,这会导致按钮从一开始就处于非活动状态。我希望只需单击一下,它就处于非活动状态 有人知道怎么解决这个问题吗C# 如何在单击按钮后禁用它。换句话说,有一个按钮只能点击一次,c#,unity3d,C#,Unity3d,我正在为我正在制作的游戏制作一个升级按钮,显然我只想升级一次,我该如何编写代码 我在互联网上四处寻找,每个人都建议尝试以下方法: gameObject.GetComponent().Interactiable=false 或 UpgradeButton.Interactiable=false 或者类似的东西。但是,这会导致按钮从一开始就处于非活动状态。我希望只需单击一下,它就处于非活动状态 有人知道怎么解决这个问题吗 提前谢谢 通过按钮的onClick方法设置属性(您可能也希望在该方法中设置升级
提前谢谢 通过按钮的
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
- 按下小+符号并分配您的空游戏对象(您使用脚本的对象)
- 从列表中选择按钮
是否可以从按钮单击事件内部调用此方法/设置属性?是否尝试设置
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
}
}