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

文章介绍了Unity3D中用于实现滚动效果的ScrollView组件和Scrollbar组件。ScrollView由Viewport、HorizontalScrollbar和VerticalScrollbar组成,内容区域通过Content进行管理,可配合ScrollRect组件和遮罩Mask实现滚动视图。文章详细阐述了ScrollView的各项设置参数及其作用,并提到了在游戏开发中,如包裹界面等场景的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们介绍一下滚动条 (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 中,创建和使用滚动视图是一项常见的任务,尤其是在需要显示大量内容(如列表、网格等)时。以下是关于如何实现滚动视图功能的详细说明。 #### 1. 准备工作 在开始之前,请确保已安装最新版本的 Unity,并熟悉 Unity 的用户界面。创建一个新的 Unity 项目或打开现有的项目[^1]。 #### 2. 添加 Scroll View 组件 - 在场景中创建一个 Canvas(如果尚未存在)。Canvas 是所有 UI 元素的容器。 - 右键点击 Canvas,在菜单中选择 **UI -> Scroll View**。这将自动创建一个带有 Scroll View 和 Content 的预制体。 - Scroll View 包含以下主要组件: - `Scroll Rect`:控制滚动行为的核心组件。 - `Content`:包含要滚动的内容的容器。 - `Viewport`:定义可见区域。 - `Scrollbar`:可选的滚动条控件。 #### 3. 配置 Scroll View 调整 Scroll View 的属性以满足需求: - 在 `Scroll Rect` 组件中,启用或禁用水平和垂直滚动选项,具体取决于所需的滚动方向。 - 设置 `Content` 的大小和位置,以确保其超出 `Viewport` 的范围,从而允许滚动。 #### 4. 使用 Content Size Fitter 为了动态调整滚动视图的内容大小,可以使用 `Content Size Fitter` 组件: - 将 `Content Size Fitter` 添加到 `Content` 对象上。 - 配置其模式为 `Preferred Size` 或其他适合的选项,以便根据子对象的数量和大小自动调整内容尺寸。 #### 5. 实现无限滚动 如果需要实现无限滚动效果,可以编写脚本来管理内容的生成和销毁。例如,当用户滚动到内容的末尾时,动态加载新的内容项并移除不可见的项[^1]。 #### 6. 优化滚动性能 为避免滚动过程中出现卡顿现象,可以采取以下措施: - 确保 `Content` 的布局合理,避免复杂的嵌套结构。 - 使用 `Caching` 技术减少不必要的 UI 更新。 - 调整 `Scroll Rect` 的 `Movement Type` 属性为 `Elastic` 或 `Clamped`,以改善用户体验。 #### 7. 自定义滑动条外观 通过调整 `Slider` 组件的属性来自定义滚动条的外观: - 修改 `Target Graphic` 来指定滑块的图像。 - 调整颜色参数(如 `Normal Color`、`Highlighted Color` 等)以定义不同状态下的视觉效果[^2]。 ```csharp // 示例代码:动态更新滚动视图内容 using UnityEngine; using UnityEngine.UI; public class ScrollViewManager : MonoBehaviour { public Transform contentPanel; // 滚动视图的 Content 容器 public GameObject itemPrefab; // 单个内容项的预制体 private void Update() { if (Input.GetKeyDown(KeyCode.Space)) { AddNewItem(); } } private void AddNewItem() { GameObject newItem = Instantiate(itemPrefab, contentPanel); newItem.transform.SetAsLastSibling(); // 确保新项位于底部 } } ``` ### 注意事项 - 确保 `Content` 的布局与滚动方向一致,例如水平滚动时使用 `Horizontal Layout Group`。 - 如果滚动视图包含大量数据,建议使用虚拟化技术来提高性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

咆哮的程序猿

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

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

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

打赏作者

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

抵扣说明:

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

余额充值