c# - WaitForSeconds 未被调用

标签 c# user-interface unity3d

我想在开始时隐藏一个按钮并让它在一定时间后再次激活。但是,对 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() 可以直接用作协程,不需要 StartCoroutineexample in the Manual 开始(可惜 Unity 在 Start 的这个功能上不是很明确)。

您很可能将 HideUnhideBtn 脚本放在了您要禁用的同一 GameObject 上。因此,这一行 buttonToHide.gameObject.SetActive(false); 使用您的脚本禁用对象,并因此停止协程。

要解决此问题,您需要使用 2 个不同的 GameObject

  1. 对于按钮
  2. 对于运行协程的脚本

第二个 GameObject 需要一直保持启用状态。如果禁用它,您将杀死协程。

关于c# - WaitForSeconds 未被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57409723/

相关文章:

c# - 允许字符输入的正则表达式检查

python - 当程序在循环中时让 Tkinter 按钮做某事

user-interface - 平移,精确定义

user-interface - WIX 相当于 C# 文本框?

c# - 我怎样才能在播放模式下沿特定轴获取播放器的位置?

c# - 为什么脚本会忽略第一个 WaitForSeconds() 之后的部分?

events - 如何检测 Unity3D 应用程序的状态——可见与否

c# - C# 中的 XML 智能感知与 VB.Net 中的一样吗?

c# - 使用 client.DownloadFile();

c# - 排序格式不正确