Unity Text超框 文字滚动循环显示

Unity Text超框 文字滚动循环显示

在这里插入图片描述

在这里插入图片描述
//container Text
在这里插入图片描述


using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEngine;
using UnityEngine.UI;public class AutoScrollText : MonoBehaviour
{private Text[] _texts = new Text[2];private RectTransform _container;private RectTransform _mask;[SerializeField] private string _txt; //显示文本[SerializeField] private float _speed = 30f; //滚动速度[SerializeField] private float _space; //间距[SerializeField] private float _overall; //字体长度[SerializeField] private float _overall2; //总长度[SerializeField] private float _leftBound = 0;// 左边界[SerializeField] private bool _scroll = false; //是否滚动private float _startTime;//开始滚动时间private void Awake(){_mask = this.GetComponent<RectTransform>();_container = transform.GetChild(0).GetComponent<RectTransform>();_texts[0] = _container.GetChild(0).GetComponent<Text>();_texts[1] = _container.GetChild(1).GetComponent<Text>();_container.pivot = new Vector2(0, 0.5f);_texts[0].rectTransform.pivot = new Vector2(0, 0.5f);_texts[1].rectTransform.pivot = new Vector2(0, 0.5f);var size = _texts[0].gameObject.GetOrAddComponent<ContentSizeFitter>();size.horizontalFit = ContentSizeFitter.FitMode.PreferredSize;size = _texts[1].gameObject.GetOrAddComponent<ContentSizeFitter>();size.horizontalFit = ContentSizeFitter.FitMode.PreferredSize;}private void Start(){//SetText(_txt,false);}private void FixedUpdate(){if (_scroll && Time.time > _startTime){if (_container.localPosition.x < -10000000){ResetContainer();}// 容器 移动_container.localPosition += Vector3.left * Time.fixedDeltaTime * _speed;//文本 位置 更新for (int i = 0; i < _texts.Length; ++i){if (_texts[i].rectTransform.localPosition.x + _container.localPosition.x < _leftBound){SetToNextViewPos(i);}}}}public void StopScroll()//停止 滚动{ResetContainer(true);}public void StartScroll() //开始 滚动{ResetContainer();}public void SetText(string _txt, bool IsStopScroll = true){this._txt = _txt;_texts[0].text = _txt;_texts[1].text = _txt;ResetContainer(IsStopScroll);}private void ResetContainer(bool IsStopScroll = false)//重置{_startTime = Time.time + 0.5f;_container.localPosition = new Vector2(_mask.rect.xMin + 5f, _container.localPosition.y);_texts[0].rectTransform.localPosition = new Vector2(0, _texts[0].rectTransform.localPosition.y);LayoutRebuilder.ForceRebuildLayoutImmediate(_texts[0].rectTransform);if (!IsStopScroll && _texts[0].rectTransform.rect.width > _mask.rect.width){var relative = new Vector2(-_texts[0].rectTransform.rect.width + _mask.rect.min.x, _mask.rect.min.y);_leftBound = relative.x;_overall = _space + _texts[0].rectTransform.rect.width;_overall2 = _overall * 2;_texts[1].rectTransform.localPosition = _texts[0].rectTransform.localPosition + Vector3.right * _overall;_scroll = true;_texts[1].gameObject.SetActive(true);}else{_texts[1].gameObject.SetActive(false);_scroll = false;}}private void SetToNextViewPos(int index)//文本位置 交替{var count = Mathf.FloorToInt(-_container.localPosition.x / _overall2);var len = (-_container.localPosition.x) % _overall2;var x = len > _overall ? _overall2 * (count + 1) : _overall2 * count;x += index * _overall;_texts[index].rectTransform.localPosition = new Vector2(x, _texts[index].rectTransform.localPosition.y);}
}

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

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

相关文章

MATLAB字符串编辑常用代码

1.字符串赋值 % 字符串赋值 sabcdefg 2.字符串属性和操作 (1)获取字符串长度 sabcdefg;% 字符串赋值 length(a) % 获取字符串长度 (2)连接字符串 % 连接两个字符串,每个字符串最右边的空格被裁切 s1a s2b s3strcat(s1,s2) 3.字符串比较 % strcmp 比较两个字符串是…

251.【2023年华为OD机试真题(C卷)】5G网络建设(最小生成树算法-JavaPythonC++JS实现)

🚀点击这里可直接跳转到本专栏,可查阅顶置最新的华为OD机试宝典~ 本专栏所有题目均包含优质解题思路,高质量解题代码(Java&Python&C++&JS分别实现),详细代码讲解,助你深入学习,深度掌握! 文章目录 一. 题目-5G网络建设二.解题思路三.题解代码Python题解代…

9. UE5 RPG创建UI(下)

在上一篇文章里&#xff0c;制作了显示血量和蓝量的ui&#xff0c;并且还将ui和获取数据使用的控制器层创建出来并初始化成功。现在只有主用户控件上面被添加了控制器层&#xff0c;还未给每个用户控件赋予控制器层。接下来要实现对属性的广播功能&#xff0c;在属性值变化的时…

【Effective C++】4. 设计与声明

Item22 将成员变量声明为private 有以下几个优势&#xff1a; 1. 语法一致性&#xff1a;访问class成员时每一个都是函数&#xff0c;不需要记住是否需要小括号 2. 使成员变量的处理有更精准的控制 class AccessLevels { public:int getReadOnly() const { return readOnly…

【issue-halcon例程学习】fuzzy_measure_pin.hdev

例程功能 检查IC的引线宽度和引线距离。 代码如下 dev_close_window () read_image (Image, board/board-06) get_image_size (Image, Width, Height) dev_open_window (0, 0, Width, Height, black, WindowHandle) * * --- Fuzzy Measure: Row1 : 305.5 Col1 : 375.5 Phi1 …

电商平台接口自动化测试脚本编写规范与实践

随着电商业务的快速发展&#xff0c;电商平台接口的稳定性和可靠性变得越来越重要。为了提高测试效率和保证接口质量&#xff0c;越来越多的企业开始采用自动化测试技术。本文将介绍电商平台接口自动化测试脚本的编写规范与实践&#xff0c;并给出相应的代码示例。 一、编写规…

gitlab.rb主要配置

根据是否docker安装,进入挂载目录或安装目录 修改此文件,我一般是在可视化窗口中修改,有时候也在命令行手敲 将下面的配置复制到该文件中 external_url http://192.168.100.50 # nginx[listen_port] = 8000 (docker安装的这一行不需要,因为端口映射导致此处修改会导致访问…

六使用Maven插件构建Docker镜像

使用Maven插件构建Docker镜像 我们知道&#xff0c;Maven是一个强大的项目管理与构建工具。如果可以使用Maven构建Docker镜像&#xff0c;那么我们的工作就能得到进一步的简化。 经过调研&#xff0c;以下几款Maven的Docker插件进入笔者视野&#xff0c;如表13-1所示。 插件…

C语言学习(3)—— 函数

C语言不支持函数重载 一、函数的使用方法 1. 直接使用 &#xff08;1&#xff09;定义的函数在main函数 之上 #include<stdio.h> int sum(int num1, int num2){int res 0;res num1 num2;return res; }int main(){int res sum(2, 3);printf("%d", res…

大数据学习之Flink、搞懂Flink的恢复策略

第一章、Flink的容错机制 第二章、Flink核心组件和工作原理 第三章、Flink的恢复策略 第四章、Flink容错机制的注意事项 第五章、Flink的容错机制与其他框架的容错机制相比较 目录 第三章、Flink的恢复策略 Ⅰ、恢复策略 1. Checkpoint&#xff1a; 2. Savepoint&#…

Sentinel降级操作

1.通过对feign调用的降级 如果访问失败&#xff0c;则返回另外的信息 正常的feign调用 FeignClient(value "gulimall-seckill",fallback SeckillFeignServiceFallback.class) public interface SeckillFeignService {/*** 写给商品服务的接口&#xff0c;查询秒杀…

2024茶饮品牌如何出圈,媒介盒子分析

随着新式茶饮的消费场景更加多元化&#xff0c;品类不断拓宽&#xff0c;消费者对新式茶饮的热情也是只增不减。居民可支配收入水平不断上升&#xff0c;居民消费升级为新式茶饮的发展也提供了良好基础&#xff0c;今天媒介盒子就来和大家聊聊&#xff1a;2024茶饮品牌如何出圈…

win10系统 pdf 文件无法正常预览

网上也看了不少办法&#xff0c;修改注册表什么的&#xff0c;太麻烦了&#xff0c;尝试了一下下载Adobe Acrobat Reader&#xff0c;安装后就可以成功预览显示啦&#xff01;对&#xff0c;就是这么简单&#xff01;Adobe Acrobat Reader下载链接&#xff1a;link

随机森林中每个树模型分裂时的特征选取方式

随机森林中每个树模型分裂时的特征选取方式 随机森林中每个树模型的每次分裂都是基于随机选取的特征子集进行分裂的。 具体来说&#xff0c;对于每个决策树&#xff0c;在每个节点的分裂过程中&#xff0c;随机森林算法会从原始特征集合中随机选择一个特征子集&#xff0c;然…

vulhub之Zabbix篇

CVE-2016-10134--SQL注入 一、漏洞介绍 zabbix是一款服务器监控软件&#xff0c;其由server、agent、web等模块组成&#xff0c;其中web模块由PHP编写&#xff0c;用来显示数据库中的结果。 漏洞环境 在vulhub靶场进行复现&#xff0c;启动zabbix 3.0.3。 二、复现步骤 1…

[代码随想录2]51单片机1T/12T到底怎么选?

为什么说51单片机怎么选&#xff1f; 时至今日&#xff0c;44年来51单片机自强不息&#xff0c;怎么描述它&#xff0c;堪称控制芯片中的王者&#xff01;&#xff01;&#xff01; 假设你21岁大学毕业进入社会&#xff0c;交社保交到今天恭喜你成功退休了214465 传统即标准5…

搭建一个简单的Spring Demo

要学习Spring 源码&#xff0c;一个是从Spring GitHub 上去down源码&#xff0c;然后倒入IDEA编译&#xff0c;但这种方法费时费力&#xff0c;如果你不需要对Spring 源码进行修改后&#xff0c;再编译的话&#xff0c;直接搭建一个Spring Demo 的Maven项目&#xff0c;引入Spr…

代理设计模式JDK动态代理CGLIB动态代理原理

代理设计模式 代理模式&#xff08;Proxy&#xff09;&#xff0c;为其它对象提供一种代理以控制对这个对象的访问。如下图 从上面的类图可以看出&#xff0c;通过代理模式&#xff0c;客户端访问接口时的实例实际上是Proxy对象&#xff0c;Proxy对象持有RealSubject的引用&am…

使用DockerFile构建镜像与镜像上传

目录 前言&#xff1a;为什么要使用Dockerfile &#xff1f; DockerFile构建镜像 1、构建基础对象 2、Dockerfile文件结构 3、构建Dockerfile文件镜像 二、镜像上传&#xff08;阿里云&#xff09; 前言&#xff1a;为什么要使用Dockerfile &#xff1f; 首先Dockerfile …

IOS-生命周期-Swift

目录 App生命周期应用状态未运行——Not running未激活——Inactive激活——Active后台——Backgroud挂起——Suspended 关系图生命周期方法相关方法注意在其他地方监听 ViewController生命周期UIView生命周期 App生命周期 应用状态 App主要有五种状态&#xff0c;分别是&…