首页 > 解决方案 > 一旦剩下的项目等于零,如何显示获胜面板?

问题描述

一旦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");
}

标签: unity3dgame-development

解决方案


有很多方法可以实现这一点。

使用您当前的代码结构:

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 会对处理器造成负担。让我知道它是否有帮助。


推荐阅读