当前位置: 首页 > 知识库问答 >
问题:

受时间刻度影响的协程WaitForSeconds

洪弘毅
2023-03-14

我正在为我的UI元素制作一个简单的动画。

我有一个动画组件,它有2个不同的动画-ZoomIn和ZoomOut。

每当需要在屏幕上显示UI元素(如按钮)时,就会显示这些动画。

我通常更喜欢在不显示时停用游戏对象。

我为动画编写了以下方法:

private IEnumerator ToggleObjectWithAnimation (GameObject gameObj) {
        Animator gameObjectAnimator = gameObj.GetComponent ();   // Animator is set to unscaled time
        if (gameObj.activeSelf == false) {
            gameObj.transform.localScale = new Vector3 (0, 0, 1.0f);
            gameObj.SetActive (true);
            gameObjectAnimator.SetTrigger ("ZoomIn");
            yield return new WaitForSeconds (0.5f);
        } else if(gameObj.activeSelf == true) {
            gameObjectAnimator.SetTrigger ("ZoomOut");
            yield return new WaitForSeconds (0.5f);
            gameObj.SetActive (false);   // code not execute when timescale = 0
        }
        yield return null;
}

对于大多数屏幕,代码工作正常,但当我使用timescale=0暂停游戏时,代码显示问题。

当时间刻度为0时,线gameObj。SetActive(false)不工作。

共有1个答案

孟鹏海
2023-03-14

我知道可能有点晚了,但是:

问题不在于SetActive,而在于WaitForSecondssi受时间的影响。时间刻度

实际暂停时间等于给定时间乘以Time.timeScale。如果希望使用未缩放时间等待,请参见WaitFor秒dsRealtime

所以如果你有时间。timescale=0等待秒将永远不会结束!

你应该使用WaitFor秒dsRealtime

private IEnumerator ToggleObjectWithAnimation (GameObject gameObj) 
{
    Animator gameObjectAnimator = gameObj.GetComponent ();   // Animator is set to unscaled time

    if (gameObj.activeSelf == false) 
    {
        gameObj.transform.localScale = new Vector3 (0, 0, 1.0f);
        gameObj.SetActive (true);
        gameObjectAnimator.SetTrigger ("ZoomIn");
        yield return new WaitForSecondsRealtime(0.5f);
    } 
    else if(gameObj.activeSelf == true) 
    {
        gameObjectAnimator.SetTrigger ("ZoomOut");
        yield return new WaitForSecondsRealtime(0.5f);
        gameObj.SetActive (false);   // code not execute when timescale = 0
    }
    yieldr eturn null;
}
 类似资料:
  • 我编写了一个程序来测试的速度。然而,内存的分配方式对速度有很大的影响。 为什么memcpy()的速度每4KB就会急剧下降? 原因与GCC编译器有关,我用不同版本的GCC编译运行了这个程序: GCC版本------------------------

  • 问题内容: 我对 写 时 复制的 理解是:“每个人都有相同数据的单个共享副本,直到被写入,然后再创建一个副本”。 同一数据的共享副本是由堆和bss段组成还是仅由堆组成? 哪些内存段将被共享,这取决于操作系统吗? 问题答案: 操作系统可以设置所需的任何“写时复制”策略,但是通常,它们都执行相同的操作(即最有意义的操作)。 松散地,对于类似POSIX的系统(Linux,BSD,OSX),有四个感兴趣的

  • 我们有一个IPlanet Web服务器,它通过非SSL(HTTP)端口与WebLogic(应用服务器)通信。我们在WebLogic中没有使用HTTPS,Web服务器和应用程序服务器位于防火墙后面。weblog服务器实例上安装了证书,但我们不使用HTTPS端口。IPlanet web服务器运行在HTTPS端口和负载平衡器后面。 LB to(HTTPSWebServer to(HTTP)Weblogi

  • 问题内容: 我发现有很多方法可以将exec语句用于PDO,但是我不确定它是否对我有帮助。我的理解是我必须对准备好的语句使用execute()函数。我正在使用来自用户输入的数据更新一行,因此我想使用一个准备好的语句而不是query()调用。 我的代码如下: 问题是查询本身没有错误并且可以正常执行,因此在$ f中存储没有错误。但是,我需要知道它是否确实找到要更新的行,然后成功更新了它。换句话说,我需要

  • 问题内容: 如何与决定在HTML堆叠元素的订单时,有关系吗? 当我保持小于由具有一些元件上的发言权。元素落后于没有元素的元素。 问题答案: 具有“自动”以外的z索引值的定位元素和不透明度值小于1的元素将生成堆叠上下文。请参阅有关喷漆顺序的规则。 在您的第一个示例中,我们具有带有多个后代的根堆栈上下文,包括: 定位的Z-index为正的绿色框 带有z-index的蓝色框 带有z-index 的蓝色框

  • 我需要移动轴中所有刻度线的标签(),使文本位于其自己的刻度线和下一个刻度线的中间。 我正在使用Roland的甘特图控件(经过一些修改)和Christian Schudt的DateAxis作为我的X轴。我的目标是根据Date值绘制甘特图(忽略时间;所有时间值都被截断)。 我的甘特图对每个任务都有一个“开始日期”和“结束日期”(即在图表上,它由一个条形图表示)。 考虑一下: 我有一个从2月1日开始的任