按照顺序Debug,1-5进行
//按照1-5顺序
//----------------------------------------------------
StartCoroutine(funcIEnumerator(ddd(), eee));
//----------------------------------------------------
#region 协程回调事件 例子1-5 仅做参考
public IEnumerator ddd()
{
print("3333");
yield return new WaitForSeconds(5);
print("4444");
}
public Coroutine funcCoroutine(IEnumerator func)
{
print("2222");
return StartCoroutine(func);
}
//第一个参数是先做的事,第二个参数进行后做的事,放到Action中
public IEnumerator funcIEnumerator(IEnumerator func, Action callback)
{
print("1111");
yield return funcCoroutine(func);
callback();
}
Action eee = () =>
{
//下一步要做的事情
print("5555");
};
#endregion
例如 我想做一个音频字幕同步的画面,启动项目 同时按照顺序播放多段音频、字幕等
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
[RequireComponent(typeof(AudioSource))]
public class TextWait : MonoBehaviour
{
public List<AudioClip> AudioClips = new List<AudioClip>();
public List<string> TextList = new List<string>();
public List<float> WaitTime = new List<float>();
private Text Texts;
private AudioSource audioSource;
private void Start()
{
Texts = GameObject.Find("Canvas/Text").GetComponent<Text>();
Texts.text = null;
audioSource = this.GetComponent<AudioSource>();
audioSource.clip = null;
StartCoroutine(WaitTimeDelay());//播放字幕
//StartCoroutine(WaitAudioDelay());//播放语音
StartCoroutine(funcWaitAudioDelay(WaitAudioDelay(), AudioEndingEvent));
}
/// <summary>
/// 播放字幕
/// </summary>
/// <returns></returns>
IEnumerator WaitTimeDelay()
{
for (int i = 0; i < TextList.Count; i++)
{
Texts.text = TextList[i];
yield return new WaitForSeconds(WaitTime[i]);
Debug.Log(i + ".............." + WaitTime[i]);
}
}
/// <summary>
/// 播放语音
/// </summary>
/// <returns></returns>
IEnumerator WaitAudioDelay()
{
for (int i = 0; i < AudioClips.Count; i++)
{
audioSource.clip = AudioClips[i];
audioSource.Play();
yield return new WaitForSeconds(AudioClips[i].length);
}
}
public Coroutine CorWaitAudioDelay(IEnumerator func)
{
return StartCoroutine(func);
}
public IEnumerator funcWaitAudioDelay(IEnumerator func, Action callback)
{
yield return funcCoroutine(func);
}
Action AudioEndingEvent = () =>
{
//最后的触发的事件写在这里
};
}