有什么网站可以做名片,简单的装x编程代码,asp建站系统源码,网页设计需要学什么好前言#xff1a;Unity中UI节点 图1
如上所示#xff0c;一开始本来是打算用ScrollView做的#xff0c;觉得直接计算对应的文本位置就行#xff0c;所以没用ScrollRect来做#xff0c;可以忽略Scroll#xff0c;Viewport这些名字。如下图#xff1a;需要在一个背景Image…前言Unity中UI节点 图1
如上所示一开始本来是打算用ScrollView做的觉得直接计算对应的文本位置就行所以没用ScrollRect来做可以忽略ScrollViewport这些名字。如下图需要在一个背景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