跳到主要内容

视图模型与实例

视图模型(View Model)定义你的数据结构。它像一个可复用的蓝图,包含一组属性,例如汽车的颜色、速度和损伤程度。

每个属性都有一个类型,例如 Number、String、Boolean、Color、Enum 或 List。更多信息请参阅视图模型属性

视图模型本身不保存值。实际值保存在一个或多个由视图模型创建出来的 视图模型实例(View Model Instance) 中。

例如,如果你正在制作一个赛车游戏,可以创建一个 Car 视图模型:

Car (View Model)
color: Color
damage: number
make: string
speed: number

同一个视图模型可以创建多个实例。每个实例共享相同结构,但保存自己的值。

Car1 (View Model Instance)
color: 0xFFFF0000
damage: 0
make: "Subaru"
speed: 0

Car2 (View Model Instance)
color: 0xFFFF00FF
damage: .9
make: "Honda"
speed: 0

这些实例中的属性可以绑定到设计元素,让文本、图片、颜色、动画、状态机和其他属性自动响应数据变化。

创建视图模型

在创建视图模型实例或设置数据绑定前,你需要先创建视图模型并添加属性。

备注

新的 Rive 文件会自带一个名为 ViewModel1 的默认视图模型,并已附加到主画板。

创建视图模型

  1. 在 Data 面板中点击 + 图标并选择 View Model
  2. 在 Data 面板中,点击视图模型名称旁边的 Add View Model Property 按钮,并选择属性类型

创建和编辑实例

创建视图模型后,你可以创建一个或多个视图模型实例,用于保存这些属性的实际值。

创建视图模型实例

一个视图模型可以拥有多个实例。每个实例都包含自己的属性值,同时共享视图模型定义的结构。

备注

创建新的视图模型时,Rive 会自动创建一个名为 Instance 的视图模型实例,让你可以立即测试绑定并预览数据。

管理实例

  1. 选择 Data 面板中的视图模型,然后在 Inspector 中点击实例名称旁边的控制图标查看现有实例。
  2. 点击 + 图标添加新实例。
  3. 双击实例名称进行重命名。
  4. 选中实例后,修改任意属性值。

注意:这只会改变当前选中视图模型实例上的值。

提示

若要一次查看所有视图模型实例和值,请点击 Open Table Data 按钮。

打开表格数据

移除实例

点击实例名称旁边的 - 图标即可删除实例。

移除视图模型实例

备注

删除视图模型实例不会删除视图模型或它的属性。它只会删除该实例和其中保存的值。

导出实例

默认情况下,导出的视图模型实例会被包含在 .riv 文件中。如果这些数据只在设计阶段使用,而运行时应用不需要,可以关闭 Export Instance

导出实例

示例:你正在 Rive 中制作高分榜。设计时会使用假分数数据,但游戏上线后,高分会从数据库或其他来源填充。此时嵌入示例数据只会增加 .riv 文件大小。

将视图模型实例连接到画板

在绑定数据之前,你需要决定数据应该放在哪里。

Rive 支持三种常见模式:

模式说明
顶层实例数据位于顶层画板,可被整个 Rive 文件使用
嵌套组件父视图模型实例保存对嵌套视图模型实例的引用,并应用到嵌套组件
状态化嵌套组件自包含、可复用,并保存自身独立数据的组件

顶层画板视图模型实例

当数据应该对整个画板及其子组件可用时,可以将视图模型实例直接附加到顶层画板。

GameVM
├─ health
└─ score
└─ avatar

主视图模型

示例:游戏主视图模型可以包含一个 score 属性。这个属性可能同时用于 header、排行榜弹窗等多个嵌套组件中。

嵌套组件实例

组件也可以拥有自己的视图模型实例。

在这种模式中,父视图模型通过直接引用或列表保存子实例。

GameVM
├─ health
└─ score
└─ avatar
└─ inventory (stores an instance of InventoryVM)

InventoryVM
├─ Sword
├─ Shield
└─ Potion

每个组件实例都可以附加自己的视图模型实例。

连接实例到嵌套组件

这种方式适合父画板需要管理一组内容,同时每个组件又要维护自身数据的场景。

示例:库存界面可能包含一组 Item 视图模型实例,每个物品槽组件绑定到不同的物品。

这种模式提供强运行时控制,但需要更多显式设置。

状态化组件

状态化组件是一个可以维护自身数据的组件实例。

与传统组件视图模型实例不同,它们不需要由父视图模型创建或引用。它们的属性会直接暴露在侧边栏中。

状态化组件

更多信息请参阅状态化组件