我有游戏对象,如果我想显示得分<2000游戏对象,并且如果得分> 2000游戏对象未显示,我只想显示一次,之后当再次得分<2000时游戏对象不再显示(我分配了游戏)对象作为我进入检查器的图像)
if (Scores < 2000) {
Rock1.gameObject.SetActive (true);
}
if (Scores > 2000) {
Rock1.gameObject.SetActive (false);
}
答案 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进行控制时间。谢谢。