【Unity-Lua】音乐播放器循环滚动播放音乐名

2024-09-07 14:04

本文主要是介绍【Unity-Lua】音乐播放器循环滚动播放音乐名,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言:Unity中UI节点

图1
图1

如上所示,一开始本来是打算用ScrollView做的,觉得直接计算对应的文本位置就行,所以没用ScrollRect来做,可以忽略Scroll,Viewport这些名字。如下图:需要在一个背景Image组件上添加上Mask组件来显示固定位置的文本显示。
在这里插入图片描述
图2

在这里插入图片描述
图3

并且需要在要显示的文本上挂载Content Size Filter组件,但是这儿会有个坑,后续会提到。
在这里插入图片描述
图4

因为需要循环滚动播放,所以需要两个文本来满足这个需求。所以图1中的MusicDuplicateText是完全复制MusicText的。具体实现过程请继续往下:

1. 刷新音乐名字信息,并初始化两个文本的位置(伪代码)

function xxxxx:RefreshMusicInfo()-- 设置音乐信息local musicInfo = xxx1self.MusicText_txt.text = xxx2self.MusicDuplicateText_txt.text = xxx2-- 更新两个文本位置-- 第一个文本x位置为0,需要设置文本锚点self.MusicText_rect.anchoredPosition = Vector2(0, self.MusicText_rect.anchoredPosition.y)-- 第二个文本x位置:第一个文本位置+文本长度+加上两个文本间隔20(可以自己选择是否要间隔)-- 这儿就是上面提到的坑,只能用preferredWidth来获取文本长度,用rect.width获取的是0self.MusicDuplicateText_rect.anchoredPosition = Vector2(self.MusicText_rect.anchoredPosition.x + self.MusicText_txt.preferredWidth + 20 , self.MusicText_rect.anchoredPosition.y)-- 这儿是我自己设置的文本长度超过显示框的长度才滚动(可以自己选择是否设置)if self.MusicText_txt.preferredWidth > self.MusicNameScroll_rect.rect.width thenself.scrollingMusic = trueend
end

注:Content Size Filter坑点:

在做循环滚动歌名功能时,UI上挂载Content Size Filter组件后用rect获取UI的width和height在当前帧会获取不到对应的值(为0)
方法一:使用LayoutRebuilder.ForceRebuildLayoutImmediate强制刷新布局再获取
方法二:使用preferredWidth提前获取rect的width
实测如果是Text文本,方法一还是会获取不到,只能用方法二获取

2. 滚动播放,实时更新文本位置

-- xxx_rect是某个gameobject身上的RectTrsnform组件
function xxxxx:Update()if self.scrollingMusic == true then-- 更新第一个文本位置self.MusicText_rect.anchoredPosition = self.MusicText_rect.anchoredPosition - Vector2(50 * Time.deltaTime, 0)-- 更新第二个文本位置self.MusicDuplicateText_rect.anchoredPosition = self.MusicDuplicateText_rect.anchoredPosition - Vector2(50 * Time.deltaTime, 0)-- 如果第一个文本超出显示的区域框,将第一个文本的位置设置到第二个文本的后面,可以自己画图理解理解if self.MusicText_rect.anchoredPosition.x <= -self.MusicText_txt.preferredWidth thenself.MusicText_rect.anchoredPosition = Vector2(self.MusicDuplicateText_rect.anchoredPosition.x + self.MusicText_txt.preferredWidth + 20, self.MusicText_rect.anchoredPosition.y)end-- 这儿是因为我只设置了滚动一次,如果需要一直滚动可以将这儿改成下面注释掉的代码if self.MusicDuplicateText_rect.anchoredPosition.x <= 0 thenself.scrollingMusic = falseend-- if self.MusicDuplicateText_rect.anchoredPosition.x <= -self.MusicDuplicateText_rect.preferredWidth then-- self.MusicDuplicateText_rect.anchoredPosition = Vector2(self.MusicText_rect.anchoredPosition.x + self.MusicDuplicateText_txt.preferredWidth + 20, self.MusicDuplicateText_rect.anchoredPosition.y)-- endend
end

这篇关于【Unity-Lua】音乐播放器循环滚动播放音乐名的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1145263

相关文章

Python中顺序结构和循环结构示例代码

《Python中顺序结构和循环结构示例代码》:本文主要介绍Python中的条件语句和循环语句,条件语句用于根据条件执行不同的代码块,循环语句用于重复执行一段代码,文章还详细说明了range函数的使... 目录一、条件语句(1)条件语句的定义(2)条件语句的语法(a)单分支 if(b)双分支 if-else(

Python实现多路视频多窗口播放功能

《Python实现多路视频多窗口播放功能》这篇文章主要为大家详细介绍了Python实现多路视频多窗口播放功能的相关知识,文中的示例代码讲解详细,有需要的小伙伴可以跟随小编一起学习一下... 目录一、python实现多路视频播放功能二、代码实现三、打包代码实现总结一、python实现多路视频播放功能服务端开

Python判断for循环最后一次的6种方法

《Python判断for循环最后一次的6种方法》在Python中,通常我们不会直接判断for循环是否正在执行最后一次迭代,因为Python的for循环是基于可迭代对象的,它不知道也不关心迭代的内部状态... 目录1.使用enuhttp://www.chinasem.cnmerate()和len()来判断for

Java循环创建对象内存溢出的解决方法

《Java循环创建对象内存溢出的解决方法》在Java中,如果在循环中不当地创建大量对象而不及时释放内存,很容易导致内存溢出(OutOfMemoryError),所以本文给大家介绍了Java循环创建对象... 目录问题1. 解决方案2. 示例代码2.1 原始版本(可能导致内存溢出)2.2 修改后的版本问题在

JAVA中while循环的使用与注意事项

《JAVA中while循环的使用与注意事项》:本文主要介绍while循环在编程中的应用,包括其基本结构、语句示例、适用场景以及注意事项,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录while循环1. 什么是while循环2. while循环的语句3.while循环的适用场景以及优势4. 注意

Python中的异步:async 和 await以及操作中的事件循环、回调和异常

《Python中的异步:async和await以及操作中的事件循环、回调和异常》在现代编程中,异步操作在处理I/O密集型任务时,可以显著提高程序的性能和响应速度,Python提供了asyn... 目录引言什么是异步操作?python 中的异步编程基础async 和 await 关键字asyncio 模块理论

流媒体平台/视频监控/安防视频汇聚EasyCVR播放暂停后视频画面黑屏是什么原因?

视频智能分析/视频监控/安防监控综合管理系统EasyCVR视频汇聚融合平台,是TSINGSEE青犀视频垂直深耕音视频流媒体技术、AI智能技术领域的杰出成果。该平台以其强大的视频处理、汇聚与融合能力,在构建全栈视频监控系统中展现出了独特的优势。视频监控管理系统EasyCVR平台内置了强大的视频解码、转码、压缩等技术,能够处理多种视频流格式,并以多种格式(RTMP、RTSP、HTTP-FLV、WebS

好题——hdu2522(小数问题:求1/n的第一个循环节)

好喜欢这题,第一次做小数问题,一开始真心没思路,然后参考了网上的一些资料。 知识点***********************************无限不循环小数即无理数,不能写作两整数之比*****************************(一开始没想到,小学没学好) 此题1/n肯定是一个有限循环小数,了解这些后就能做此题了。 按照除法的机制,用一个函数表示出来就可以了,代码如下

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

poj3750约瑟夫环,循环队列

Description 有N个小孩围成一圈,给他们从1开始依次编号,现指定从第W个开始报数,报到第S个时,该小孩出列,然后从下一个小孩开始报数,仍是报到S个出列,如此重复下去,直到所有的小孩都出列(总人数不足S个时将循环报数),求小孩出列的顺序。 Input 第一行输入小孩的人数N(N<=64) 接下来每行输入一个小孩的名字(人名不超过15个字符) 最后一行输入W,S (W < N),用