资源管理

在 Kanzi 中,资源是可以在应用程序的不同部分重用的项目。例如,Mesh Data 资源定义了 Model 节点的几何形状,您可以在不同的节点中使用相同的 Color Brush 来设置 Foreground Brush 或 Background Brush 属性。

../_images/color-brush-resource.gif

Kanzi Resource Manager 使您能够在应用程序中组织和重用资源。

为节点设置资源

在 Kanzi 中,您可以直接使用资源 URL 或间接使用资源键将资源设置到节点。默认情况下,当您在 Kanzi Studio 中设置资源时,它会使用 URL 分配所有资源。如果您想在 Kanzi Studio 中使用间接设置,您需要在资源字典中为资源创建一个键,并在属性中选择该键。由于键查找是分层的,您可以通过在树中创建资源字典条目来定义键的解析方式。

使用资源键设置资源,您可以:

../_images/resource-management-skin.png ../_images/resource-management-language.png ../_images/resource-management-content.png

创建并应用不同的皮肤或主题来更改应用程序的外观。

创建不同版本的应用程序以适用于不同的语言和地区。

重写资源以模块化内容。

您可以共享资源以减少应用程序的内存和运行时需求。这使您能够重用相同的资源,或更改资源以便更改反映在整个应用程序中。例如,这样您可以共享一个动画画笔。

Kanzi 提供了许多工具来管理应用程序运行时的资源。在 Kanzi 中,您可以:

Kanzi 资源类型

../_images/alias-icon.png

Alias

使用 Alias 来获得对 Kanzi 节点的一致访问。您可以使用别名来访问 Kanzi Studio 中的节点,并使用 Kanzi Engine API。

使用别名

../_images/animation-clip-icon.png

Animation Clip

使用 Animation Clip 将 Animation Data 资源组合成更复杂的动画。您可以在不同的 Animation Clip 项目中重用相同的 Animation Data 资源。使用 Animation Child Clip 创建分层动画。

动画 (Animations)

编辑动画剪辑

编辑时间线序列

../_images/animation-data-icon.png

Animation Data

使用 Animation Data 资源定义关键帧动画的关键帧和目标属性。一个 Animation Data 资源只能针对一个属性或属性字段。Animation Data 资源独立于其目标节点。这使您可以重用 Animation Data 资源来为不同的节点设置动画。

../_images/timeline-sequence-icon.png

Timeline Sequence

使用 Timeline Sequence 来组合一组 Timeline Entry 资源。

../_images/brush-icon.png

Brushes

笔刷可用于设置 2D 节点的背景。在 Kanzi 中,所有 2D 节点默认具有透明背景。

使用刷子

../_images/fonts-icon.png

Fonts

使用字体来渲染文本。Kanzi 中的默认字体是 Fira Sans Regular。要使用您自己的字体,请将其导入到您的 Kanzi Studio 项目中。

导入字体

../_images/material-icon.png

Materials

材质可用于设置3D节点和 Material Brush 笔刷的外观。

材质类型和材质

../_images/mesh-icon.png

Mesh Data

网格是顶点、边和面的集合,以平面和直边以及形成点之间的面的三角形定义 3D 立体对象的形状。

使用网格

../_images/textures-icon.png

Textures

使用纹理在 Image 节点中显示内容,设置纹理材料的外观,并在 Texture Brush 画笔中显示内容。您可以从常见的图像文件格式创建纹理。

纹理 (Textures)

../_images/render-pass-prefabs-icon.png

Render Pass Prefabs

使用渲染通道来定义 Kanzi 应用程序中 3D 内容的渲染。

在渲染传递预设中,您可以创建渲染传递的层次结构以实现特定的渲染结果。

渲染 (Rendering)

../_images/object-source-icon.png

Object Source

对象源和过滤器可用于告诉 Draw Objects 渲染通道您要渲染 Kanzi 应用程序中的哪些节点。Root Object Source 包含当前活动的 Scene 节点的节点树中的所有节点。

使用对象源

../_images/resource-dictionary-icon.png

Resource Dictionary

资源字典是指向资源的资源 ID 的集合。您可以将资源字典添加到任何节点。

使用资源字典

../_images/state-managers-icon.png

State Managers

使用 State Manager 在您的 Kanzi 应用程序中创建不同的状态。

状态机 (State Manager)

../_images/styles-icon.png

Styles

样式可用于设置一个或多个特定类型节点的属性值。

使用 styles

../_images/text-resource-icon.png

Text Resources

文本资源是由 Text Block 和 Text Box 节点使用的文本字符串。

文本 (Text)

../_images/trajectory-icon.png

Trajectories

轨迹可用作路径,Trajectory Layout 3D 和 Trajectory Layout 2D 节点沿着路径排列其子节点,或者沿着路径 Trajectory List Box 3D 节点移动其项目。

轨迹 (Trajectories)

将资源资产导入到工程中

您可以直接在 Kanzi Studio 中创建一些资源(例如,画笔和动画)。对于某些资源,您必须导入在第三方工具中创建的资产(例如,纹理和网格)。请参阅 导入。

资源 URL

引用资源的最基本方式是使用 URL。URL 可以引用 kzb 文件内的资源或设备存储上的文件。当您在属性中设置资源时,需要提供资源的 URL。当您在 Properties 窗口中的 Kanzi Studio 中执行此操作时,Kanzi 会自动为您选择的资源执行此操作。当您使用 API 设置资源属性时,需要手动提供资源的 URL。要在项目中找到资源的 URL,请在 Kanzi Studio 中右键单击资源并选择 Copy .kzb URL。要引用设备存储上的文件,请使用 file:/// URL 格式。

使用 API 时,您可以直接指定资源对象。接受资源对象的节点通常提供一个接受此类对象的方法重载。 例如,要在 Image 节点中设置图像,请使用 Image2D::setImage。

资源字典 (Resource Dictionary)

资源字典是每个资源的键值对条目的集合。您可以在任何节点中定义资源字典。键提供了间接指定资源的方法:您可以指定一个键,而不是指定资源或节点的 URL。Kanzi 通过查找最近的资源字典动态解析资源,其中键定义了解析到哪个资源。当需要将键解析为项目时,解析过程从使用该键的节点开始检查资源字典:如果该节点的字典包含该键,则节点使用该键;如果不包含,则节点检查其父节点的字典,直到找到该键。此过程递归进行,直到节点树的根。如果节点未找到该键,则由节点决定接下来会发生什么。例如,如果一个 Image 节点不显示图像,这是一个有效的情况。Kanzi 在未找到资源时控制软失败,但在插件中,由插件的作者定义会发生什么。

默认资源

Kanzi 附带默认资源,使您能够更快地创建应用程序。例如,当您创建一个 Scene 时,Kanzi 提供默认渲染通道,当您创建一个 Text Block 或一个 Text Box 节点时,Kanzi 提供默认字体。如果您需要自定义默认的 Kanzi 资源,请创建或导入符合您需求的资源,并使用它们代替 Kanzi 默认资源。

当您从您的 Kanzi Studio 项目创建一个 kzb 文件时,默认的 Kanzi 资源默认包含在 kzb 文件中。

Resource manager

Resource Manager 管理资源的生命周期、加载和卸载。您可以使用 Kanzi API 访问 Resource Manager,并可以使用它来指定资源的生命周期策略以及移除未使用的资源。要指定资源是始终保留在内存中,还是在不需要时卸载,您需要指定一个策略。您可以为 Resource Manager 全局指定一个策略,或者为每个资源指定一个策略。如果策略是将资源保留在内存中,您可以根据应用程序的逻辑请求手动移除。例如,当您在应用程序中更改一个 Page 节点以加载大量资源到一个新的 Page 节点时,您可以手动移除资源。

Resource Manager 允许您定义在 Kanzi 应用程序中存储 GPU 资源的内存。例如,要在 Library > Materials and Textures > Textures 中为 Kanzi Studio 中的纹理设置此项,请选择一个纹理,并在 Properties 中设置 GPU Memory Type 属性:

  • GPU Only。资源被部署到 GPU 内存中,并在部署后立即从 RAM 中释放。Kanzi 将资源保留在 GPU 内存中,除非您在应用程序代码中释放它。

  • GPU and RAM。资源被部署到 GPU 内存中。Kanzi 将资源保存在 GPU 和 RAM 内存中,并根据平台和应用程序管理资源。Kanzi 自动管理资源的卸载。与仅使用 GPU 相比,这会消耗更多的 RAM,但在例如 Android 上提供更快的恢复时间。

  • RAM Only。资源仅在应用程序代码中指示时才部署到 GPU。Kanzi 将资源保留在 GPU 内存中,并在您在应用程序代码中释放它时卸载。

暂停和恢复

当您的 Kanzi 应用程序处于暂停状态 (MainLoopState::Paused) 时:

  • 在 Android 上,默认情况下,不存储在 kzb 文件中的 GPU 资源会失效。如果您的应用程序使用自定义资源且不从 kzb 文件加载,请确保在需要时手动重新加载和重新部署这些资源。Kanzi 会自动恢复所有其他资源。

  • 在其他平台上,Kanzi 默认情况下不会使 GPU 资源失效。

您可以在应用程序配置中设置当应用程序处于暂停状态时如何处理 GPU 资源。在 应用程序配置参考 中,请参阅 处理GPU资源。

另请参阅

资源 (Resources)

使用资源字典

设置 Kanzi Engine 如何处理未使用的资源

应用程序开发

应用程序配置参考