Unity 使Text文本内容配合音频逐个显示并动态设置富文本

在做一个项目时,需要Text文本内容逐个显示 并且配合音频的播放速度,当音频结束时,文本也显示完毕,而且给每一段文本设置不同的颜色和字号,

代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
[RequireComponent(typeof(AudioSource ))]//绑定声音组件
public class SystemInfo : MonoBehaviour
{
    private string s = "";//保存总文本内容
    string currentContent;//最新的文本内容
    public AudioClip clip;//系统消息音频
    public AudioClip yichang;//异常发现音频
    private AudioSource audio;
    Text t;
    string RichTextStart;//保存富文本的开头修饰符
    string RichTextEnd="</size>"+ "</color>";//富文本的结尾修饰符
    int newPos;//记录每一次文本播放完后的位置
    int pos;//切割文本的位置  上一次播放播放完后的位置
    void Start()
    {
        t=GetComponent<Text>();
        audio = GetComponent<AudioSource>();
        AddContent("系统消息:某日,天气晴,西北风2-3级", Color .blue ,30);
        AddCilp(clip);//添加 系统消息的音频
    }
  
    void Update()
    {
        //当newPos小于总文本长度
        if (newPos < s.Length)
        {
            //音频播放的进度和文字逐个出现的速度一样
            newPos = pos + (int)((audio.time / audio.clip.length) * currentContent.Length);//获取音频的播放平均速度乘文本的长度
            t.text = s.Substring(0, newPos)+ RichTextEnd;
            
            
        }
       //当不播放音频时
        if (!audio .isPlaying )
        {
           t.text = s ;//显示总文本内容
        }
        //按下空格
        if(Input .GetKeyDown (KeyCode .Space ))
        {

           AddContent("异常发现",Color .red ,40);//添加文本 设置颜色和字号
            AddCilp(yichang);//添加异常发现音频
           
        }
        
    }
  /// <summary>
  /// 添加文本内容
  /// </summary>
  /// <param name="content">内容</param>
  /// <param name="color">颜色</param>
  /// <param name="size">字号</param>
    public void   AddContent(string content,Color color ,float size)
    {
        currentContent = content;//把添加的内容赋值给currentContent
        //                           可以获取颜色的十六进制的字符串
        RichTextStart = "<color=#" + ColorUtility.ToHtmlStringRGB(color) + ">"+"<size="+size+">";//富文本开头
        string text = RichTextStart + currentContent + RichTextEnd;//内容与富文本拼接
        s += text;//拼接好的内容赋值给总内容中 
      
    }
    /// <summary>
    /// 添加音频
    /// </summary>
    /// <param name="clip">音频片段</param>
    public void AddCilp(AudioClip clip )
    {
        //pos记录上一个文本播放完毕后的位置
        pos = s.Length - currentContent.Length-RichTextEnd .Length ;
        audio.clip = clip;
        audio.Play();
    }
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值