unity中实现播放字幕功能

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;  //是否读到&这个字符

猜你喜欢

转载自blog.csdn.net/qq_41691338/article/details/87916904