unity中实现播放字幕功能
public UILabel Titles; //字幕
public StreamReader sr; //文件流
public int index;//字幕索引
public float tempTime;//停顿时间
public string Txt;//字幕名字
public string[] lines;
public Dictionary<int, SubtitleInformation> dict=new Dictionary<int,SubtitleInformation> ();//存放ID 并读取信息
void Awake()
{
Instance = this;
}
/// <summary>
/// 存字幕信息到SubtitleInformation
/// </summary>
public void GetSubtitle()
{
//读取配置文档Day 1
TextAsset s = Resources.Load(Txt) as TextAsset;
if (s!=null)
{
string text = s.text;
//读取每行,存入lines
lines = text.Split('\n');
for (int i = 0; i < lines.Length; i++)
{
//定义SubtitleInformation变量,将字幕的信息都存进infor中
SubtitleInformation infor = new SubtitleInformation();
if (!string.IsNullOrEmpty(lines[i]))
{
infor.text = lines[i].Split('$')[0];//字幕
infor.id = i;//字幕索引
infor.time = float.Parse(lines[i].Split('$')[1].Replace("&", ""));//字幕时间 Replace("&","")将&替换成空格
//是否存在&
if (lines[i].Contains("&"))
{
infor.IsMy_text = true;
}
else infor.IsMy_text = false;
//将infor的信息添加进字典中 之后可以直接调用dict的信息
dict.Add(i, infor);
}
}
}
}
/// <summary>
/// 读取字幕信息
/// </summary>
/// <returns></returns>
IEnumerator PlayTitles()
{
for (; index < dict.Count; )
{
SubtitleInformation infor = null;
if (dict.TryGetValue(index, out infor))
{
//调用dict的信息赋值给字幕text和时间tempTime
Titles.text = infor.text;
tempTime = infor.time;//有相同的value,所以用索引查找值
//读到&时,遍历日检中的盖子
if (infor.IsMy_text == true)
{
MenuManager_UI.Instance.ForeachGaizi_list();
}
//读取时间间隔
yield return new WaitForSeconds(tempTime);
index++;
}
}
}
//开启协程
public void OpenIEnum()
{
StartCoroutine(PlayTitles());
}
//关闭协程
public void CloseIEnum()
{
StopAllCoroutines();
}
并使用SubtitleInformation来存储字幕信息
public int id;//当前字幕id
public string text;//当前字幕
public float time;//当前字幕秒数
public string position;//当前字幕位置
public bool IsMy_text; //是否读到&这个字符