簡體   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