众所周知,字幕在电影的放映中十分的重要,特别是像我这样的英语很差的来说,看英文电影,如果没有字幕的话是一件十分痛苦的事情,话不多说,现在进入主题,如何在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;
最后附上一张运行图,
感觉有点low... 就这样了QAQ