我想在开始时隐藏一个按钮并让它在一定时间后再次激活。但是,对 WaitForSeconds()
的调用不起作用。
我试过以下方法:
- 让其他方法调用 WaitForSeconds
- 从其他脚本访问
bool
值以跳过 WaitForSeconds - StartCoroutine 方法
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
public class HideUnhideBtn : MonoBehaviour
{
public Button buttonToHide;
public float comeInTime = 32.5f;
IEnumerator Start()
{
buttonToHide.gameObject.SetActive(false);
yield return new WaitForSeconds(comeInTime);
buttonToHide.gameObject.SetActive(true);
}
}
最佳答案
协程不在禁用的对象上运行
到目前为止的答案是不正确的,因为 Start()
可以直接用作协程,不需要 StartCoroutine
从 example in the Manual 开始(可惜 Unity 在 Start 的这个功能上不是很明确)。
您很可能将 HideUnhideBtn
脚本放在了您要禁用的同一 GameObject
上。因此,这一行 buttonToHide.gameObject.SetActive(false);
使用您的脚本禁用对象,并因此停止协程。
要解决此问题,您需要使用 2 个不同的 GameObject
。
- 对于按钮
- 对于运行协程的脚本
第二个 GameObject
需要一直保持启用状态。如果禁用它,您将杀死协程。
关于c# - WaitForSeconds 未被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57409723/