【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

相关文章

Java中的for循环高级用法

《Java中的for循环高级用法》本文系统解析Java中传统、增强型for循环、StreamAPI及并行流的实现原理与性能差异,并通过大量代码示例展示实际开发中的最佳实践,感兴趣的朋友一起看看吧... 目录前言一、基础篇:传统for循环1.1 标准语法结构1.2 典型应用场景二、进阶篇:增强型for循环2.

Python循环结构全面解析

《Python循环结构全面解析》循环中的代码会执行特定的次数,或者是执行到特定条件成立时结束循环,或者是针对某一集合中的所有项目都执行一次,这篇文章给大家介绍Python循环结构解析,感兴趣的朋友跟随... 目录for-in循环while循环循环控制语句break语句continue语句else子句嵌套的循

Python如何将OpenCV摄像头视频流通过浏览器播放

《Python如何将OpenCV摄像头视频流通过浏览器播放》:本文主要介绍Python如何将OpenCV摄像头视频流通过浏览器播放的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完... 目录方法1:使用Flask + MJPEG流实现代码使用方法优点缺点方法2:使用WebSocket传输视

MySQL存储过程之循环遍历查询的结果集详解

《MySQL存储过程之循环遍历查询的结果集详解》:本文主要介绍MySQL存储过程之循环遍历查询的结果集,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言1. 表结构2. 存储过程3. 关于存储过程的SQL补充总结前言近来碰到这样一个问题:在生产上导入的数据发现

html 滚动条滚动过快会留下边框线的解决方案

《html滚动条滚动过快会留下边框线的解决方案》:本文主要介绍了html滚动条滚动过快会留下边框线的解决方案,解决方法很简单,详细内容请阅读本文,希望能对你有所帮助... 滚动条滚动过快时,会留下边框线但其实大部分时候是这样的,没有多出边框线的滚动条滚动过快时留下边框线的问题通常与滚动条样式和滚动行

Golang实现Redis分布式锁(Lua脚本+可重入+自动续期)

《Golang实现Redis分布式锁(Lua脚本+可重入+自动续期)》本文主要介绍了Golang分布式锁实现,采用Redis+Lua脚本确保原子性,持可重入和自动续期,用于防止超卖及重复下单,具有一定... 目录1 概念应用场景分布式锁必备特性2 思路分析宕机与过期防止误删keyLua保证原子性可重入锁自动

uniapp小程序中实现无缝衔接滚动效果代码示例

《uniapp小程序中实现无缝衔接滚动效果代码示例》:本文主要介绍uniapp小程序中实现无缝衔接滚动效果的相关资料,该方法可以实现滚动内容中字的不同的颜色更改,并且可以根据需要进行艺术化更改和自... 组件滚动通知只能实现简单的滚动效果,不能实现滚动内容中的字进行不同颜色的更改,下面实现一个无缝衔接的滚动

Nginx部署React项目时重定向循环问题的解决方案

《Nginx部署React项目时重定向循环问题的解决方案》Nginx在处理React项目请求时出现重定向循环,通常是由于`try_files`配置错误或`root`路径配置不当导致的,本文给大家详细介... 目录问题原因1. try_files 配置错误2. root 路径错误解决方法1. 检查 try_f

Spring三级缓存解决循环依赖的解析过程

《Spring三级缓存解决循环依赖的解析过程》:本文主要介绍Spring三级缓存解决循环依赖的解析过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、循环依赖场景二、三级缓存定义三、解决流程(以ServiceA和ServiceB为例)四、关键机制详解五、设计约

redis中使用lua脚本的原理与基本使用详解

《redis中使用lua脚本的原理与基本使用详解》在Redis中使用Lua脚本可以实现原子性操作、减少网络开销以及提高执行效率,下面小编就来和大家详细介绍一下在redis中使用lua脚本的原理... 目录Redis 执行 Lua 脚本的原理基本使用方法使用EVAL命令执行 Lua 脚本使用EVALSHA命令