2016-04-04 4 views
1

Ich habe ein Skript, das eine Skybox in eine andere mischt. Ich muss etwas Code schreiben, damit diese Mischanimation passiert, wenn die Audioquelle 2 Minuten ist.Tun Sie etwas, wenn die Audioquelle 2 Minuten lang abgespielt wurde

Wie kann ich das tun? Ich habe über AudioSource.timeSamples gelesen, aber ich verstehe nicht wirklich, wie ich weiß, wenn 2 Minuten erreicht ist. Sollte ich eine andere Methode verwenden?

+0

note - nie timeSamples aus irgendeinem Grund verwenden, ist es irrelevant. Du denkst einfach an ** Zeit **. Aber ehrlich gesagt ist es enorm einfacher, einfach zu tun, was es in der Antwort unter – Fattie

Antwort

2
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."); 
    } 
+0

sagt, ah sah nur, wie man Invoke verwendet. Das ist perfekt, danke für die Hilfe! –

+0

Vielen Dank für Ihre Hilfe, okay, es macht die Skybox zu ändern, aber es verblasst es nicht, es ändert sich nur. Irgendwelche Ideen? –

+0

könnte sein "Geschwindigkeit" ist zu hoch oder niedrig eingestellt – Fattie

0

Hier wird das Arbeitsskript ist:

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; 
    } 

    }