Как отобразить выигрышную панель, когда оставленный элемент равен нулю? - PullRequest
0 голосов
/ 04 мая 2019

Я хочу отобразить выигрышную панель в игре, когда itemLeft = 0. Но все еще не могу понять, как и в чем ошибка.Ниже показано мое кодирование getScore: -

public GameObject scoretext;
public GameObject itemlefttext;
public GameObject finalScore;
public static float score = 0;

public GameObject winPanel;

private void Start()
{
    scoretext.GetComponent<Text>().text = "0";
    setscore(0);
}

private void Update()
{
    itemlefttext.GetComponent<Text>().text = "" + GameObject.FindGameObjectsWithTag("draggableobject").Length;

    if (GameObject.FindGameObjectsWithTag("draggableobject").Length == 0)
    {
        winPanel.SetActive(true);
    }
}

public void setscore(float scoretoadd)
{
    score += scoretoadd;
    scoretext.GetComponent<Text>().text = score.ToString("F0");
    finalScore.GetComponent<Text>().text = score.ToString("F0");
}

1 Ответ

1 голос
/ 04 мая 2019

Есть много способов реализовать это.

С вашей текущей структурой кода:

private void Update()
{
itemlefttext.GetComponent<Text>().text = ""+GameObject.FindGameObjectsWithTag("draggableobject").Length;

//itemLeftTxt = GameObject.FindGameObjectWithTag("Text").GetComponent<Text>();
itemLeftTxt.text = gameObject.GetComponent<Text>().text;

if (itemLeftTxt.text == "0")
{
    winPanel.SetActive(true);
}
}

Незначительное улучшение:

private void Update()
{
    itemlefttext.GetComponent<Text>().text = "" + GameObject.FindGameObjectsWithTag("draggableobject").Length;

    //itemLeftTxt = GameObject.FindGameObjectWithTag("Text").GetComponent<Text>();
    itemLeftTxt.text = gameObject.GetComponent<Text>().text;

    if (GameObject.FindGameObjectsWithTag("draggableobject").Length == 0)
    {
        winPanel.SetActive(true);
    }
}

Если эти перетаскиваемые объекты не создаются во время выполнения, вы можете создать общедоступную переменную и назначить для них ссылку через инспектор ИЛИ

Новый способ:

    public GameObject[] DraggableObjects; 

Добавьте это к функции запуска:

        DraggableObjects = GameObject.FindGameObjectsWithTag("draggableobject");
        itemLeftTxt = gameObject.GetComponent<Text>();

Вы можете удалить дополнительную строку кодов:

Функция окончательного обновления:

private void Update()
{
    itemlefttext.text = "" + DraggableObjects.Length;

    if (DraggableObjects.Length == 0)
    {
        winPanel.SetActive(true);
    }
}

Функция окончательного запуска:

private void Start()
{
    DraggableObjects = GameObject.FindGameObjectsWithTag("draggableobject");
    itemLeftTxt = GetComponent<Text>();
}

PS: вызов Gameobject.FindGameObjectsWithTag внутри обновления будет сильно загружать процессор. Дайте мне знать, если это поможет.

...