Unity实现简单字幕效果

发表于2018-11-11
评论0 5.6k浏览
在看电影的时候,没有字幕总觉得很别扭,尤其是英语电影,对于英语不好的人来说,就一定需要有个中文字幕存在,下面这篇就给大家分享下在Unity中实现一个简单的字幕轮播效果。

代码实现:
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
using UnityEngine.UI;
public class MovieText : MonoBehaviour
{
    //用来显示字幕的TextUi
    public Text Titles;
    //文件流,用于读取文本
    StreamReader sr;
    //文本中的字幕的行数
    int lineCount=0;
    void Start()
    {
        StartCoroutine(Display());
    }
    IEnumerator Display()
    {
        sr= new StreamReader(Application.dataPath + "/text.txt");
        //创建一个流,用于读取行数
        StreamReader srLine = new StreamReader(Application.dataPath + "/text.txt");
        //循环来读取行数,直到为null停止
        while(srLine.ReadLine()!=null)
        {
            lineCount++;
        }
        //关闭并释放流
        srLine.Close();
        srLine.Dispose();
        for (int i = 0; i < lineCount; i++)
        {
            string tempText = sr.ReadLine();
            Titles.text = tempText.Split('$')[0];
            Debug.Log(Titles.text);
            //也就是
            float tempTime;
            //将文中的那个$3中的3读取出来
            if(float.TryParse(tempText.Split('$')[1], out tempTime))
            {
                //协程等待
                yield return new WaitForSeconds(tempTime);
            }
        }
        //关闭并释放流
        sr.Close();
        sr.Dispose();
    }
}

以上便是所有的代码,Unity的编译器中要设置的东西也并不多,只需要创建一个text便可,让后把它拖到脚本的Text变量上面。然后运行就OK了,之后我们就能看到这样的字幕显示在界面上了,哦,新建一个text.txt文件,下面是text的内容:
轻轻的我走了,$2
正如我轻轻的来;$2
我轻轻的招手,$2
作别西天的云彩。$2

在每行的最后那个$2看起来是有点多余,主要是用于字符串的分割,2就是这个协程
yield return new WaitForSeconds(tempTime);
中穿入的参数,还有就是float.TryParse()的运用,用于返回tempTime;

效果图如下:

以上就是给大家分享的简单字幕轮播效果的实现方法了,希望可以帮到大家。

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引