繁体   English   中英

尝试禁用它时,Unity3D按钮似乎为空

[英]An Unity3D button appears to be null while trying to disable it

我想做的是在时间到时禁用按钮。 但是在将按钮设置为禁用时出现错误:它似乎为空。

以下脚本( RightButton.cs )包含一个称为DisableButton的函数,该函数由主脚本( TappingEngine.cs )调用。

挂在DisableButton函数内部的语句是btn.interactable = false;

/* RightButton.cs */

using UnityEngine;
using UnityEngine.UI;

public class RightButton : MonoBehaviour {

    Button btn;

    // Use this for initialization
    void Start () {
        Debug.Log("Right button ready.");
    }

    public void Tap()
    {
        Debug.Log("Tap right! tot: " + TappingEngine.te.nTaps);
        TappingEngine.te.Tap(TappingEngine.tapType_t.right);
    }

    public void DisableButton()
    {
        btn = this.GetComponent<Button>();
        btn.interactable = false;
    }
}

以下代码是主脚本的一部分 (很长)。 但是,有人建议我发布完整版本以求清楚。

(着重于两个函数Update ()DisableButtons() 。)

/* TappingEngine.cs */

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;


public class TappingEngine : MonoBehaviour {


    public static TappingEngine te;
    public int nTaps = 0;
    public int GlobalTotal;
    public int RightTaps;
    public int LeftTaps;
    public string FirstTap;
    public int LastTap;
    public int MaxChain;
    public int FastestTwoTaps;
    public int FastestTwoChainedTaps;

    public GlobalTotalTaps GlobalTotalTaps_script;
    public TotalRightTaps RightTotalTaps_script;
    public TotalLeftTaps LeftTotalTaps_script;
    public FirstTap FirstTap_script;
    public RightButton RightButton_script;

    const float TimeSpan = 5F;
    public float Chrono;
    public bool ChronoStart = false;
    public bool ChronoFinished = false;
    public float ElapsedPercent = 0F;

    public enum tapType_t { right, left };

    // Use this for initialization
    void Start () {
        GlobalTotal = 0;
        te = this;
        GlobalTotalTaps_script = FindObjectOfType(typeof(GlobalTotalTaps)) as GlobalTotalTaps;
        RightTotalTaps_script = FindObjectOfType(typeof(TotalRightTaps)) as TotalRightTaps;
        LeftTotalTaps_script = FindObjectOfType(typeof(TotalLeftTaps)) as TotalLeftTaps;
        FirstTap_script = FindObjectOfType(typeof(FirstTap)) as FirstTap;
        RightButton_script = FindObjectOfType(typeof(RightButton)) as RightButton;
    }

    // Update is called once per frame
    void Update () {
        if(ChronoStart) {

            ElapsedPercent = (Time.time - Chrono) * 100 / TimeSpan;

            if(ElapsedPercent >= 100F) {
                DisableButtons();
                //SceneManager.LoadScene("Conclusion", LoadSceneMode.Single);
            }
        }
        Debug.Log("Elapsed time: " + (Time.time - Chrono));
    }

    private void DisableButtons()
    {
        RightButton_script.DisableButton();
    }

    public void OnTap() {
        Debug.Log("Tap!");
    }

    public void Tap(tapType_t tapType) {

        Manage_GlobalTotalTaps();
        if(GlobalTotal == 1) {
            Manage_FirstTap(tapType);
            ChronoStart = true;
            Chrono = Time.time;
        }
        Manage_LeftRight(tapType);


    }

    private void Manage_FirstTap(tapType_t tapType)
    {
        FirstTap = tapType.ToString();
        FirstTap_script.FastUpdate();
    }

    private void Manage_LeftRight(tapType_t tapType)
    {
        if (tapType.Equals(tapType_t.left))
        {
            LeftTaps++;
            LeftTotalTaps_script.FastUpdate();
        }
        else
        {
            RightTaps++;
            RightTotalTaps_script.FastUpdate();
        }
    }

    public void Manage_GlobalTotalTaps() {
        GlobalTotal++;
        GlobalTotalTaps_script.FastUpdate();
    }
}

以下是一些屏幕截图,希望它们会有用。

在此处输入图片说明 在此处输入图片说明

到目前为止,我还没有弄清楚问题出在哪里。 此外,该按钮的脚本与表示统计信息的各种Text对象(屏幕右侧的列表)非常相似。

对于Text对象,它起作用,而Button对象则不起作用。

我在Unity3D论坛上问了同样的问题,然后在这里找到了解决方案。

我附加了RightButton.cs一个游戏对象是第24行Button btn;上的一个变量Button btn; 需要设置为public ,所以public Button btn;

这使得在Right Button对象的检查器中出现一个新条目(请参见下图),因此在Unity3D中将Right Button GameObject拖放到Right Button(Script)的适当字段中(在这种情况下为Btn )。

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM