zoukankan      html  css  js  c++  java
  • Unity中字幕的一个简单实现方式小结

      众所周知,字幕在电影的放映中十分的重要,特别是像我这样的英语很差的来说,看英文电影,如果没有字幕的话是一件十分痛苦的事情,话不多说,现在进入主题,如何在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

  • 相关阅读:
    获取系统版本
    一句代码删除所有子视图
    MAJOR-MINOR-MKDEV
    AF_UNIX和AF_INET域的socket在epoll中的差异
    python-print
    python-class(5)
    python-class(4)
    python-class(3)
    python-class(2)
    python-class(1)
  • 原文地址:https://www.cnblogs.com/springword/p/6083217.html
Copyright © 2011-2022 走看看