仅一次显示Gameobject统一

时间:2018-08-18 17:23:37

标签: c# unity3d gameobject

我有游戏对象,如果我想显示得分<2000游戏对象,并且如果得分> 2000游戏对象未显示,我只想显示一次,之后当再次得分<2000时游戏对象不再显示(我分配了游戏)对象作为我进入检查器的图像)

if (Scores < 2000) {

    Rock1.gameObject.SetActive (true);

}
if (Scores > 2000) {

    Rock1.gameObject.SetActive (false);

}

4 个答案:

答案 0 :(得分:4)

只需使用布尔变量。您可以使用以下代码:

bool hideOneTime = false;

...

if (!hideOneTime)
{
    if (score < 2000)
    {
        Rock1.gameObject.SetActive (true);
    }
    else if (score > 2000)
    {
        Rock1.gameObject.SetActive (false);
        hideOneTime = true;            
    }
}

希望对您有帮助

答案 1 :(得分:3)

您希望GameObject在得分<2000时显示,然后在Game 2000> 2000时隐藏GameObject,但不要再次执行。

您可以在Update函数中使用布尔值变量作为标志来执行此操作,但是由于您希望此函数运行一次,因此最好在协程函数中执行此操作。 Unity的Start协程函数很好,并且可以自行启动。这将运行一次,并且不会再次检查它,因为协程函数将立即退出,与Update函数不同。

public int scores;
public GameObject Rock1;

IEnumerator Start()
{
    //Wait until score is < 2000
    while (!(scores < 2000))
        yield return null;

    //Show Object
    Rock1.SetActive(true);

    //Wait again until score is > 2000
    while (!(scores > 2000))
        yield return null;

    //Hide Object
    Rock1.SetActive(false);

    //Done. Coroutine stops!
}

答案 2 :(得分:1)

您可以简单地测试游戏对象的状态。

例如,如果您要显示它并执行SetActive,则可以执行以下操作:

if(!Rock1.gameObject.activeSelf)
    Rock1.gameObject.SetActive(true);

反之亦然,如果您想隐藏它。

编码愉快!

答案 3 :(得分:0)

在Start()函数而不是Update()函数中编写代码。 否则游戏对象将在崩溃前无限生成。

如果您想隐藏游戏对象,请尝试通过代码关闭渲染器,但是如果您希望ur对象永久使用其逻辑,请尝试在需要时销毁它,并使用IEnumerator进行控制时间。谢谢。