当音源播放 2 分钟时做一些事情

Posted

技术标签:

【中文标题】当音源播放 2 分钟时做一些事情【英文标题】:Do something when the audio source has been playing for 2 mins 【发布时间】:2016-04-04 16:18:43 【问题描述】:

我有一个脚本可以将一个天空盒融合到另一个天空盒中。我需要编写一些代码,以便在音频源为 2 分钟时发生这种混合动画。

我该怎么做? 我已经阅读了有关 Audiosource.timeSamples 的信息,但我真的不明白我是如何知道何时达到 2 分钟的。我应该使用其他方法吗?

【问题讨论】:

注意 - 切勿出于任何原因使用 timeSamples,这无关紧要。你只是在想.time。但是,老实说,按照下面的答案中所说的去做要简单得多 【参考方案1】:
void Start()
  
  Debug.Log("Audio begins now.....");
  Invoke("TwoMinutesHasPassed", 120f);
  

void TwoMinutesHasPassed()
  
  Debug.Log("two minutes has passed");
  Debug.Log("now i will fade the background");
  StartCoroutine("FadeNow");
  

private IEnumerator FadeNow()
  
  tParam = 0f;
  while (tParam < 1)
    
    tParam += Time.deltaTime * speed;  
    valToBeLerped = Mathf.Lerp(0, 1, tParam);
    Debug.Log("valToBeLerped is " + valToBeLerped.ToString("f4"));
    yield return null;
    
  skyboxmaterial.SetFloat("_Blend", valToBeLerped);
  Debug.Log("fade is done.");
  

【讨论】:

啊刚刚查了一下如何使用Invoke。这是完美的,感谢您的帮助! 感谢您的帮助,好的,它正在改变天空盒,但它并没有褪色,它只是改变了。有什么想法吗? 可能是“速度”设置得太高或太低 注意我在循环中添加的调试语句,这将有助于了解发生了什么 得到了这个错误:“.FadeNow(): 不是所有的代码路径都返回一个值”,所以我添加了一个“yield return null”并让它运行。但它仍然没有褪色,它直接从变成了最后的天空。【参考方案2】:

这是工作脚本:

using UnityEngine;
using System.Collections;

public class animateSkyBox : MonoBehaviour 

public Skybox sky;
public Material skyboxmaterial; 
float tParam = 0f;
float valToBeLerped = 0f;
float speed = 0.1f; 



    void Start()
  
        skyboxmaterial.SetFloat("_Blend", 0);
  Debug.Log("Audio begins now.....");
  Invoke("TwoMinutesHasPassed", 10f);
  

void TwoMinutesHasPassed()
  
  Debug.Log("two minutes has passed");
  Debug.Log("now i will fade the background");
  StartCoroutine("FadeNow");
  

private IEnumerator FadeNow()
  
  tParam = 0f;
  while (tParam < 1)
    
    tParam +=  Time.deltaTime;  
    valToBeLerped = Mathf.Lerp(0, 1, tParam);
            skyboxmaterial.SetFloat("_Blend", valToBeLerped);
            yield return null;
    Debug.Log("valToBeLerped is " + valToBeLerped.ToString("f4"));

    
  //skyboxmaterial.SetFloat("_Blend", valToBeLerped);
  Debug.Log("fade is done.");
  yield break;
  

  

【讨论】:

以上是关于当音源播放 2 分钟时做一些事情的主要内容,如果未能解决你的问题,请参考以下文章

PHP Javascript?当用户关闭页面或浏览器时做一些事情[重复]

当本地通知到达或超过可以使用的通知总数时做一些事情

按下 UITableViewCell 时做一些事情

javascript 初始加载时做一些事情

在显示 contextMenu 时做一些事情

如何在退出 Qt 应用程序时做一些事情