02对话系统---图片的导入

news2024/9/22 3:49:26

样式

例:

1.<style=H1>

Hellow <style=H1>world             效果:
 

样式表

路径:

插入图片

插入默认图片

 2.<sprite=0>

text<sprite=0>                效果:

图集路径:

导入单个图片

给png图片添加精灵资产

inde为0

因为用到了动态加载,所以一定要把常见的资产放在Resources文件夹下

导入多图片

先在包管理器中找到2D Sprite导入

切片完以后再创建精灵

设置默认图集

修改此处

修改图片坐标

在图片集中修改

代码的修改

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro;
using System.Text.RegularExpressions;
using System;

/// <summary>
/// 增加文本时间停顿功能
/// 增加文字渐出,(单个字符逐渐显现)
/// </summary>



//文本时间停顿功能

//效果:如果使用AdvancedTextPreprocessor的预处理器
//则先经过string ITextPreprocessor.PreprocessText(string text)该方法处理的返回值
//才能显示出来

public class AdvancedTextPreprocessor : ITextPreprocessor
{
    //字典类型,表示在第几个字后面停顿的时间
    public Dictionary<int, float> InterrvalDictionary;

    public AdvancedTextPreprocessor()
    {
        InterrvalDictionary=new Dictionary<int, float>();
    }
    public string PreprocessText(string text)
    {
        //清空字典
        InterrvalDictionary.Clear();
        string processingText=text;
        //.:任意字符,*:匹配前面的字符零次或者多次,?:匹配最近的结果
        //*?匹配零次或者多次的那个最短的结果
        string pattern = "<.*?>";
        //输入的字符串+以那种规则去匹配的字符串
       Match match= Regex.Match(processingText,pattern);
       //删掉所有标签
        //如果可以匹配到结果
        while(match.Success)
        {
            string label = match.Value.Substring(1,match.Length - 2);
            //如果能转换为浮点类型则进入if,结果存到 result中
            if (float.TryParse(label,out float result))
            {
                //因为<0.3>前面还有<占一个位置
                InterrvalDictionary[match.Index - 1] = result;
            }
            //删掉标签   
            processingText = processingText.Remove(match.Index, match.Length);
            //^表示必须从字符串的开头进行匹配
            if (Regex.IsMatch(label, "^sprite=.+"))
            {
              
                processingText = processingText.Insert(match.Index, "*");
               // processingText = processingText.Remove(match.Index, match.Length);
            }

           
           
           
            match = Regex.Match(processingText,pattern);
        }
        //删掉数据标签
        processingText = text;
        //*     代表前一个字符出现零次或多次
        //+     代表前一个字符出现一次或多次
        //?     代表前一个字符出现零次或一次
        //.     代表任意字符
        pattern = @"<(\d+)(\.\d+)?>";
        //processingText中,把所有符合pattern规则的字符替换成"xxx"
        processingText = Regex.Replace(processingText, pattern, "");
        return processingText;
    }
}

public class AdvancedText : TextMeshProUGUI
{
    public AdvancedText()
    {
        //接口类型的预处理器textPreprocessor(可以自己定义预处理效果是什么样的)
        textPreprocessor = new AdvancedTextPreprocessor();
    }
    private AdvancedTextPreprocessor SelfPreprocessor => (AdvancedTextPreprocessor)textPreprocessor;
    public void ShowTextByTyping(string content)
    {
        SetText(content);
        StartCoroutine(Typing());
    }
    private int _typingIndex;
    private float _defaultInterval = 0.06f;

    IEnumerator Typing()
    {
        //强制网格更新
        ForceMeshUpdate();
        for (int i = 0; i < m_characterCount; i++)
        {
            //先把颜色设置成透明
            SetSingleCharacterAlpha(i, 0);
        }
        _typingIndex = 0;
        while (_typingIndex < m_characterCount)
        {
            if (textInfo.characterInfo[_typingIndex].isVisible)
            {
                StartCoroutine(FadeInCharacter(_typingIndex));
            }
            //SetSingleCharacterAlpha(_typingIndex, 255);           
            if (SelfPreprocessor.InterrvalDictionary.TryGetValue(_typingIndex, out float result))
            {
                yield return new WaitForSecondsRealtime(result);
            }
            else
            {
                yield return new WaitForSecondsRealtime(_defaultInterval);
            }
            _typingIndex++;
        }



        //yield return null;
    }
    //原理:改变单个文字的Alpha
    //newAlpha范围是0-255
    private void SetSingleCharacterAlpha(int index, byte newAlpha)
    {
        TMP_CharacterInfo charInfo = textInfo.characterInfo[index];
        //材质索引
        int matIndex = charInfo.materialReferenceIndex;
        //顶点索引
        int verIndex = charInfo.vertexIndex;
        for (int i = 0; i < 4; i++)
        {
            //color32表示所有的顶点颜色
            textInfo.meshInfo[matIndex].colors32[verIndex + i].a = newAlpha;
        }
        UpdateVertexData();
    }

    // 渐显角色函数,用于平滑地调整角色透明度
    IEnumerator FadeInCharacter(int index, float duration = 0.2f)
    {
        //瞬间显示
        if (duration <= 0)
        {
            SetSingleCharacterAlpha(index, 255);
        }
        else
        {
            float timer = 0;
            while(timer<duration)
            {
                //unscaledDeltaTime不考虑时间的放缩,游戏暂停的时候也不停止
                //timer不能超过duration
                timer = Mathf.Min(duration, timer + Time.unscaledDeltaTime);
                SetSingleCharacterAlpha(index, (byte)(255 * timer / duration));
                yield return null;
            }
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1921750.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

飞腾平台虚拟机组播性能调优指南

【写在前面】 飞腾开发者平台是基于飞腾自身强大的技术基础和开放能力&#xff0c;聚合行业内优秀资源而打造的。该平台覆盖了操作系统、算法、数据库、安全、平台工具、虚拟化、存储、网络、固件等多个前沿技术领域&#xff0c;包含了应用使能套件、软件仓库、软件支持、软件适…

网优学习干货:xx5G速率优化现场实战版

速率概述 无线网络仍然是5G网络能力最容易受限的环节&#xff0c;无线网络技术的应用将最终决定5G网络能力的木桶深度。移动通信中传统关键技术在5G将会继续使用。5G NR在继承了LTE原有部分技术基础上&#xff0c;采用了一些技术演进和新技术创新。比如NR继承了LTE的OFDM和SC-…

内网安全:权限维持的各种姿势

1.Linux权限维持 2.Windows权限维持 目录&#xff1a; 一.Linux权限维持&#xff1a; 1.webshell&#xff1a; 2.定时任务&#xff1a; 3.SUID后门&#xff1a; 4.SSH Key免密登录后门&#xff1a; 5.添加用户后门&#xff1a; 二.Windows权限维持 1.计划任务后门&…

活用 localStorage

我维护的这款工具 https://editor.yunwow.cn/ 已经帮我写了 7 篇文章了&#xff0c; 用起来很顺手&#xff0c;因此我打算再给它升级下让它更方便&#xff0c;我决定要给它加个本地缓存功能。我给它提的要求是&#xff1a; 1. 至少能缓存 5 篇文章 2. 能有选择的加载模板 3…

C语言:指针详解(4)

作者本人由于大一下学期事情繁多&#xff0c;大部分时间都在备赛&#xff0c;没有时间进行博客撰写&#xff0c;如今已经到了暑假时间&#xff0c;作者将抓紧每一天的时间进行编程语言的学习&#xff0c;由于目前作者已经进行到了C的学习&#xff0c;C语言阶段的学习与初阶数据…

QT之嵌入外部第三方软件到本窗体中

一、前言 使用QT开发&#xff0c;有时需要调用一些外部程序&#xff0c;但是单独打开一个外部窗口有的场合很不合适&#xff0c;最好是嵌入到开发的QT程序界面中。还有就是自己开发的n个程序&#xff0c;一个主程序托n个子程序&#xff0c;为了方便管理将各个程序独立&#xf…

JMeter CSV 参数文件的使用教程

在 JMeter 测试过程中&#xff0c;合理地使用参数化技术是提高测试逼真度的关键步骤。本文将介绍如何通过 CSV 文件实现 JMeter 中的参数化。 设定 CSV 文件 首先&#xff0c;构建一个包含需要参数化数据的 CSV 文件。打开任何文本编辑器&#xff0c;输入希望模拟的用户数据&…

烟雾识别技术在火灾预防中的应用:思通数科大模型的力量

引言 火灾是导致生命财产损失的重大灾害之一。早期检测和快速响应是预防火灾和减少损失的关键。结合思通数科大模型的烟雾识别技术&#xff0c;为实时检测和精确定位烟雾来源提供了一种高效的解决方案。本文将探讨这一技术如何有效预防火灾并保障人员安全。 烟雾识别技术概述 …

Transformer——多头注意力机制(Pytorch)

1. 原理图 2. 代码 import torch import torch.nn as nnclass Multi_Head_Self_Attention(nn.Module):def __init__(self, embed_size, heads):super(Multi_Head_Self_Attention, self).__init__()self.embed_size embed_sizeself.heads headsself.head_dim embed_size //…

Shiro550反序列化漏洞分析

shiro搭建教程可以在网上自行搜索 漏洞发现 进入shiro界面后&#xff0c;burp抓包&#xff0c;选择remember me并进行登录。观察burp抓到的包 登录之后服务器返回一个Cookie Remember me 之后用户的访问都带着这个Cookie 这个Cookie很长&#xff0c;可能会在里面存在一定的信…

springboot增加过滤器后中文乱码

记录一下小问题 public class RepeatableHttpServletWrapper extends HttpServletRequestWrapper {private byte[] body;public RepeatableHttpServletWrapper(HttpServletRequest request) throws IOException {super(request);request.setCharacterEncoding("UTF-8&q…

数据建设实践之大数据平台(一)准备环境

大数据组件版本信息 zookeeper-3.5.7hadoop-3.3.5mysql-5.7.28apache-hive-3.1.3spark-3.3.1dataxapache-dolphinscheduler-3.1.9大数据技术架构 大数据组件部署规划 node101node102node103node104node105datax datax datax ZK ZK ZK RM RM NM

Git的命令使用与IDEA内置git图形化的使用

Git 简介 Git 是分布式版本控制系统&#xff0c;它可以帮助开发人员跟踪和管理代码的更改。Git 可以记录代码的历史记录&#xff0c;并允许您在不同版本之间切换。 通过历史记录可以查看&#xff1a; 进行了哪些更改&#xff1f;谁进行了更改&#xff1f;何时进行了更改&#…

nodejs模板引擎(二)

虽然Jade现在已经被更名为Pug&#xff0c;但它的使用方式并没有太大的改变。下面是如何在Node.js中使用Pug&#xff08;原Jade&#xff09;模板引擎的基本步骤&#xff1a; 1. 安装 Pug 首先&#xff0c;你需要安装Pug模块。在你的项目目录中&#xff0c;使用npm来安装&#…

gradle 和 java 版本对应关系

文章目录 gradle 和 java 版本对应关系原地址 gradle 和 java 版本对应关系 原地址 https://docs.gradle.org/current/userguide/compatibility.html#compatibility

超市暑期(7-8月)生鲜之蔬果商品及营销操作建议!

生鲜经营的思路现在越来越被重视&#xff0c;越来越做的更精细化&#xff0c;营销方法和手段越来越多&#xff0c;如何正确地运用好营销策略&#xff0c;如何做到这个季节的生鲜经营既能保持新鲜&#xff0c;又能保持盈利呢&#xff1f; 7-8月份蔬菜重点商品及季节性商品 叶菜…

无人驾驶大热,新能源汽车智能化中的算网支持

来源新华社&#xff1a;百度“萝卜快跑”全无人驾驶汽车行驶在路上 当前&#xff0c;新能源汽车产业数智化已成为全球汽车产业数字化转型的焦点。一方面&#xff0c;随着人工智能、大数据、云计算等技术的深度融合&#xff0c;新能源汽车在自动驾驶、智能互联、能源管理等方面…

从零设计一个神经网络:实现手写数字识别

前言 为了能够更好的理解神经网络&#xff0c;从手写数字识别这个小任务来逐层弄清楚神经网络的工作原理以及一般流程是非常合适的。 这篇文章就来手写完成一个数字识别的任务&#xff0c;来说明如何设计、实现并训练一个标准的前馈神经网络&#xff0c;以期对神经网络有一个…

AI编程助手-Tabnine的使用体验

文章目录 一&#xff0c;安装使用1&#xff0c;VSCode安装Tabnine插件2&#xff0c;使用 三&#xff0c;Tabnine的工作原理1&#xff0c;深度学习的力量2&#xff0c;注意事项&#xff1a;最大化Tabnine的效能 在编程的世界里&#xff0c;每一行代码都承载着创造者的智慧与汗水…

ubuntu安装YOLOV8环境

文章目录 前言 前言 ubuntu20.04 使用vmware虚拟机 1、安装python sudo apt-get install python3 python3-pip2&#xff0c;安装虚拟环境 sudo apt install python3.8-venv3&#xff0c;创建虚拟环境 python3 -m venv yolov8-env4&#xff0c;进入虚拟环境 source yolov8…