unity3d 第一次点击Unity UI按钮没有响应

xdnvmnnf  于 2022-12-04  发布在  其他
关注(0)|答案(1)|浏览(253)

我正在尝试使用Unity的UI系统。
我想要的是,我有一个按钮#1作为一个卡图像,我有按钮2作为一个黑桃图像。首先,我将点击黑桃图像,它的指示器将打开。之后,我将点击卡图像,使黑桃图标图像消失。我设法得到变量从脚本到另一个脚本,但无论我做的第一次点击黑桃按钮,指示灯亮起,检查器中的spadeselected bool发生变化。当spadeselected为真时,第一次单击Card图像没有任何作用。单击两次之后,一切正常。什么可能导致此问题?
我的main卡按钮脚本:

public class main : MonoBehaviour
{
    private bool ace = false;
    
    spadestatement _spadestatement;
    public GameObject spadebutton;
        
    public GameObject spade_icon;

    private void Awake()
    { 
        _spadestatement = spadebutton.GetComponent<spadestatement>();
    }

    private void Start()
    {
        gameObject.GetComponent<Button>().onClick.AddListener(turnoff);
    }

    private void turnoff()
    {
        ace ^= true;
        
        if (_spadestatement.spadeselected == true)
        {   
            spade_icon.SetActive(ace);
        }
    }
}

我的黑桃按钮spadestatement脚本:

public class spadestatement : MonoBehaviour
{
    public bool spadeselected;
    public GameObject indicator;

    void Start()
    {
        gameObject.GetComponent<Button>().onClick.AddListener(select);
    }

    public void select()
    {
        spadeselected ^= true;
        indicator.SetActive(spadeselected);
    }
}

这里有一张图片让它更容易理解:

aij0ehis

aij0ehis1#

spadeselected为true时,第一次调用turnoff()时:

private void turnoff()
{
    ace ^= true; //first time : after the assignment, ace is true
    
    if (_spadestatement.spadeselected == true)
    {   
        spade_icon.SetActive(ace); // since ace is true, set spade_icon active
    }
}

第二次调用turnoff()时,ace变为false,因此spade_icon处于非活动状态。
如果你想打开/关闭spade_icon,可以试试这个:

private void turnoff()
{
    ace ^= true; //first time : after the assignment, ace is true
    
    if (_spadestatement.spadeselected == true)
    {   
        spade_icon.SetActive(!ace); // since ace is true, set spade_icon deactive
    }
}

或者,如果您不想将spade_icon的活动/停用行为与ace绑定,您可以:

private void turnoff()
{
    if (_spadestatement.spadeselected == true)
    {   
        spade_icon.SetActive(!spade_icon.activeSelf);
    }
}

相关问题