第四十五章 Unity 滚动视图 (Scroll View) UI

我们介绍一下滚动条 (Scrollbar),它允许用户滚动由于太大而无法完全看到的图像或其他视图。这种效果在我们网页中经常看到,尤其是网页内容太长的时候,就会在垂直方向出现滚动条。当然,有时候也会在水平方向出现滚动条。我们拖动滚动条就能看到剩余的内容。通常情况下,滚动条(Scrollbar)经常搭配滚动区域ScrollRect组件以及遮罩 Mask组件一起来创建滚动视图,并且滚动视图中会存在水平或垂直的滚动条。滚动矩形 (Scroll Rect)中的Horizontal Scrollbar和Vertical Scrollbar就用来指定水平或垂直的Scrollbar游戏对象的。在实际的开发中,我们经常会使用Scroll View滚动视图UI元素,它实际上就是Scrollbar + ScrollRect的组合使用。

接下来,我们就介绍一下Scroll View滚动视图。

 

Scroll View这个游戏对象包含三个子类,一个是Viewport就是主显示区域,另外两个是Scrollbar Horizontal和 Scrollbar Vertical游戏对象。很明显,前者用来存放实际内容,它的检视面板中拥有Mask组件。Mask遮罩组件可以将子视图超出父视图的部分隐藏。后面两个就是水平和垂直方向的滚动条Scrollbar UI元素。我们在查看Scroll View的检视面板,发现它拥有一个ScrollRect的组件。

Content:滚动的内容区域,就对应了Viewport子游戏对象下子游戏对象Content。

Horizontal:是否启动水平滚动,默认启用。

Vertical:是否启动垂直滚动,默认启动。

Movement Type:滑动框的弹性模式,有 Unrestricted不受限,Elastic 弹性,Clamped 夹紧三种模式。默认值是Elastic 弹性。

Elasticity :Elastic弹性模式中的反弹量,默认值为0.1

Inertia:启用惯性,拖动结束后会根据惯性继续移动,默认勾选该项。

Deceleration Rate:减速率,决定停止移动的速度,速率为0时立即停止运动,1时永不停止。

Scroll Sensitivity:灵敏度,滚轮时的灵敏程度,默认值为1

以上的设置都是滚动的时候,Content内容移动视觉效果而已。

Viewport :视口,就对应了Viewport子游戏对象

Horizontal Scrollbar:底部的水平滚动条,就对应了Scrollbar Horizontal子游戏对象。

Visibility:默认值为AutoHideAndExpandViewport,表示如果显示的内容没有超出 Viewport 的话自动隐藏,如果超过Viewport的话就自动显示。

Spacing:选择自动隐藏并展开视口时,滚动条和视口之间的空间。默认值为-3

Vertical Scrollbar:右边的竖直滚动条,就对应了Scrollbar Vertical子游戏对象。

Visibility:同上。

Spacing:同上。

Scroll View滚动视图由两个滚动条和一个显示区域组成。滚动条由一个垂直方向的滚动条和一个水平方向的滚动条组成。滚动视图的显示区域由Viewport视图组成,它挂载了一个遮罩组件,该组件会隐藏超过该该视图范围的子视图内容。 所以Viewport视图代表了真正显示出的视图区域。Viewport下有Content视图组成。Content视图是需要显示的视图。该视图可能非常大。一般情况下,我们会将其他UI控件添加到Conetnt视图下作为子对象存在。Content视图中填充的内容可以通过代码来完成,添加完成之后确保没有超出Content视图即可。由于Content视图包含的内容可能会非常多,所以常常搭配自动布局组件来使用。Scroll View主要是充当布局容器,类似于Panel面板容器。比如,我们可以使用它来制作游戏中的包裹界面。由于包裹里面的物品比较多,需要使用滚动效果才能看到完整内容。

本课程涉及的内容已经共享到百度网盘:https://pan.baidu.com/s/1e1jClK3MnN66GlxBmqoJWA?pwd=b2id

### 解决 Unity滚动视图内文字显示不全或需要延展的问题 在处理 Unity 的 `Scroll View` 组件时,如果遇到文字显示不完全的情况,通常是因为内容区域的大小未正确设置或是布局组未能动态调整子项的高度。为了确保文字能够正常显示并支持自动扩展,可以采取以下措施: #### 设置 Content Size Fitter 和 Vertical Layout Group 为了让包含多行文本的内容区域能够自适应高度变化,在父级 GameObject 上添加 `ContentSizeFitter` 并将其垂直拟合模式设为 PreferredSize[^1]。 ```csharp // C# 脚本用于初始化 ScrollView 内容适配器 using UnityEngine; using UnityEngine.UI; public class ScrollViewContentAdapter : MonoBehaviour { private RectTransform contentRectTransform; void Start() { // 获取 ContentView 的 RectTransform 参考 contentRectTransform = GetComponent<RectTransform>(); // 添加 Content Size Fitter 如果不存在的话 if (contentRectTransform.GetComponent<ContentSizeFitter>() == null){ var sizeFitter = contentRectTransform.gameObject.AddComponent<ContentSizeFitter>(); sizeFitter.verticalFit = ContentSizeFitter.FitMode.PreferredSize; } // 确保有 VerticalLayoutGroup 存在于同一对象上 if (!contentRectTransform.TryGetComponent(out VerticalLayoutGroup layout)){ layout = contentRectTransform.gameObject.AddComponent<VerticalLayoutGroup>(); layout.childControlHeight = true; layout.childForceExpandWidth = false; layout.padding.top = 0; layout.spacing = 5f; } } } ``` 对于每一个 Text 或 InputField 类型的对象,应该保证它们都位于上述配置好的容器之中,并且各自拥有合适的 `TextMeshProUGUI` 配置来允许换行和自动尺寸调整。 通过这种方式,当向 Scroll View 中添加新的文本条目时,整个内容区域会根据实际需求增长,从而避免了因空间不足而导致的文字截断现象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咆哮的程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值