使用kanzi的预设件
1.预设件概念
预设件(预制模板):可用于构造应用程序并创建统一接口,您可以使用预设件创建应用程序的构建块,并简化应用程序的维护。
- 创建结构一致的内容。例如,使用预设件可以创建结构始终相同的按钮,但外观可能有所差异。
- 模块化您的工程,使其更容易维护。
- 控制 Kanzi 应用程序的加载和启动时间。
- 为您的 Kanzi 应用程序创建不同的主题。
- 本地化您的 Kanzi 应用程序。
2. 预设件和预设件实例
- 只有当您加载预设件时,它们才会消耗设备的内存。当您加载预设件时,预设件消耗的内存量取决于该预设件包含的节点和属性数量。
- 当您实例化预设件时,Kanzi 会创建节点并向这些节点分配属性。用实例数量乘以单个预设件实例的内存要求,即可计算预设件实例消耗的内存。
3.预设件占位符 (Prefab Placeholder) 和预设件视图 (Prefab View) 节点
您可以使用预设件占位符 (Prefab Placeholder) 和预设件视图 (Prefab View) 节点来实例化工程中的预设件。这些节点的区别在于:
-
当您使用预设件占位符 (Prefab Placeholder) 节点实例化某个预设件时,Kanzi 会读取一次预设件模板 (Prefab Template) 属性值,并将预设件占位符 (Prefab Placeholder) 节点替换为该属性所指的预设件。
💚💚💚💚💚💚💚💚💚💚💚💚💚💚💚💚💚💚💚💚💚💚
例如,如果您使用 2D 预设件占位符 (Prefab Placeholder 2D) 节点来实例化包含2D 按钮 (Button 2D) 节点的预设件,当 Kanzi 实例化该预设件时,它会将 2D 预设件占位符 (Prefab Placeholder 2D) 节点替换为2D 按钮 (Button 2D) 预设件的根节点。 -
当您使用预设件视图 (Prefab View) 节点实例化某个预设件时,Kanzi 会监控预设件模板 (Prefab Template) 属性的值,并将该属性所指的预设件添加为预设件视图 (Prefab View) 节点的子节点。通过这种方式,您就可以更改预设件视图 (Prefab View) 实例化的预设件,并且让您的应用程序在加载资源时保持自适应。
🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡
如果您使用 2D 预设件视图 (Prefab View 2D) 节点来实例化包含2D 按钮 (Button 2D) 节点的预设件,当 Kanzi 实例化该预设件时,它会将2D 按钮 (Button 2D) 节点的根节点添加为 2D 预设件视图 (Prefab View 2D) 节点的子节点。
- Kanzi 会读取一次预设件占位符 (Prefab Placeholder) 的预设件模板 (Prefab Template) 属性值,但预设件视图 (Prefab View) 节点监控预设件模板 (Prefab Template) 属性值的更改情况。当预设件视图 (Prefab View) 中的预设件模板 (Prefab Template) 属性值更改时,Kanzi 会使用新的子节点替换其子节点。
3.1 何时使用预设件占位符 (Prefab Placeholder) 和预设件视图 (Prefab View) 节点
- 使用预设件占位符 (Prefab Placeholder) 节点来实例化您在应用程序运行时不打算更改的预设件。
- 如果您想动态更改预设件,或者想要异步加载该预设件使用的资源,请使用预设件视图 (Prefab View) 来实例化预设件。
例如,当您为应用程序制定主题并且想要为不同的主题使用不同的预设件,请使用预设件视图 (Prefab View) 节点来实例化这些预设件。
4. 创建和使用预设件
-
在 预设件 (Prefabs) 中 并选择要创建的预设件。
例如,创建一个 2D 按钮 (Button 2D) 预设件,并向其添加一个 图像 (Image) 和一个 2D 文本块 (Text Block 2D) 节点。
-
要在应用程序中实例化预设件
从 预设件 (Prefabs) 中将您创建的预设件拖动到 工程 (Project) 并将其放到要使用该预设件的节点上。
Kanzi Studio 创建一个预设件占位符 (Prefab Placeholder) 节点,实例化工程中的预设件。
要实例化其他预设件,在工程 (Project) 中选择要更改的预设件,并在属性 (Properties) 中将预设件模板 (Prefab Template) 属性设为要实例化的预设件。
5. 自定义预设件的实例
- 预设件可以包含具有各自属性的节点树。
- 编辑预设件中的节点或工程中的预设件实例时,就会更改该预设件所有实例中的这些节点。
- 但您可以通过重写默认预设件中的值来自定义预设件的各个实例以获得各个值。例如,您为地址簿条目创建预设件时,每个地址簿条目要显示不同的名称、编号和照片
5.1 要自定义预设件的个别实例
-
在预设件 (Prefabs) 中选择您要自定义其实例的预设件中的节点。
-
在您要编辑的属性旁的属性 (Properties) 中点击
-
在工程 (Project) 中选择要自定义的预设件实例的根。
-
编辑预设件
要编辑预设件,双击 预设件 (Prefabs) 中的预设件。Kanzi Studio 只显示预览 (Preview) 窗口选项卡中的预设件。您现在可以使用预览 (Preview) 工具编辑预设件并查看编辑结果,无需实例化预设件。
-
将场景图节点转为预设件
要将工程场景图的任何部分转为预设件,从工程 (Project) 中,将您要转为预设件的部分的根拖动至预设件 (Prefabs)。
-
将节点放到 预设件 (Prefabs) 窗口中时,Kanzi Studio 从节点创建预设件模板,并用预设件的实例替换原始节点。
6. 异步加载预设件资源
- 当您异步加载预设件资源时,Kanzi 使用单独线程来加载资源。
- 当 Kanzi 完成资源的加载时,它会使用主要线程部署这些资源。
通过这种方式,您的应用程序会在加载资源时保持自适应。
使用资源剖析测量运行期间花费了多长时间在 Kanzi 应用程序中加载和部署资源与预设件。 资源剖析数据可帮助您找出要异步加载哪些资源
🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀
要异步加载预设件资源
-
创建您想要在Kanzi 加载预设件资源时显示的内容。
例如,要创建用异步加载的预设件资源内容替换的加载屏幕,在 资产 (Assets) 中,将 源 (Source) 设为 出厂内容 (Factory Content),将 处理指示器 (Processing Indicator) 拖放到 预设件 (Prefabs)。
-
创建您要异步加载其资源的预设件
例如,在 预设件 (Prefabs) 中创建 2D 堆栈布局 (Stack Layout 2D) 并向其添加多个 图像 (Image) 节点,且每个节点都指向不同的图像
-
在 工程 (Project) 中创建您要在其中异步加载预设件资源的预设件视图 (Prefab View) 节点,并且在属性
(Properties) 中将预设件模板 (Prefab Template) 属性设为您想要在 Kanzi
加载您在上一步中创建的预设件资源时显示的内容。
例如,将预设件模板 (Prefab Template) 属性设为处理指示器 (Processing Indicator) 预设件
- 在 工程 (Project) 中,选择预设件视图 (Prefab View) 节点,在节点组件 (Node Components) > 触发器 (Triggers) 部分中右键点击,选择添加触发器 (Add Trigger),然后选择您要用于开始加载预设件资源的触发器。
例如,当 Kanzi 附加预设件视图 (Prefab View) 节点到场景图时,添加附加时 (On Attached) 触发器以开始加载资源。
- 在节点组件 (Node Components) 中,为您在上一步中添加的触发器点击添加 (Add) 下拉菜单,然后选择开始异步加载 (Start Asynchronous Load) 动作
- 在动作设置窗口中,将预设件模板 (Prefab Template) 属性设为预设件,或指向您要异步加载其资源的预设件的资源 ID。
- 要定义 Kanzi 完成资源加载时发生的事件:
- 在 工程 (Project) 中,选择预设件视图 (Prefab View) 节点,在节点组件 (Node Components) > 触发器 (Triggers) 部分中右键点击并选择添加触发器 (Add Trigger) > 预设件视图 (Prefab View) > 异步加载已完成 (Asynchronous Load Completed)
、
2 .在异步加载已完成 (Asynchronous Load Completed) 触发器的节点组件 (Node Components) > 触发器 (Triggers) 中点击添加 (Add) 下拉菜单并选择一个动作。
例如:选择导航至页面 (Navigate to Page) 动作并将项 (Item) 设为当 Kanzi 完成资源加载时您想要该应用程序导航至的页面 (Page) 节点。
- 在 工程 (Project) 中,选择预设件视图 (Prefab View) 节点,在节点组件 (Node Components) > 触发器 (Triggers) 部分中右键点击并选择添加触发器 (Add Trigger) > 预设件视图 (Prefab View) > 异步加载已完成 (Asynchronous Load Completed)
- 在 Kanzi Studio 中,选择 文件 (File) > 导出 (Export) > 导出为适用于 Windows 的 KZB 播放器 (Export as KZB Player for Windows),并在 /Tool_project/Application Player 目录中打开该应用程序的 .exe 文件.
由于 Kanzi Studio 预览 (Preview) 启动时会加载工程中的所有资源,为了查看异步加载资源的效果,请导出该工程作为 kzb 文件播放器,或导出工程 kzb 文件并从工程 Visual Studio 解决方案运行该应用程序。
6 .使用脚本实例化预设件
当您知道要在工程的场景图中的哪个位置使用预设件,但不想实例化 Kanzi Studio 中的预设件时,可以使用脚本实例化预设件,或使用工程中的预设件替换节点。
要使用脚本实例化预设件:
-
在 预设件 (Prefabs) 中,创建您要使用脚本实例化的预设件。
例如,创建3D 文本块 (Text Block 3D)
-
在 工程 (Project) 中,创建您要实例化预设件的节点。
例如,在场景 (Scene) 中创建 3D 堆栈布局 (Stack Layout 3D)。
-
在 工程 (Project) 中,创建您要用于触发预设件实例化的节点。
例如,在场景 (Scene) 中创建3D 按钮 (Button 3D) 并使用其按钮: 点击 (Button:Click) 触发器。
-
在您要用于实例化预设件的触发器的节点组件 (Node Components) 中点击添加 (Add) 下拉菜单并选择执行脚本 (Execute Script) 动作。
-
在执行脚本 (Execute Script) 窗口中选择现有脚本,或选择+ 创建脚本 (+ Create Script) 以创建脚本。
-
在脚本编辑器 (Script Editor) 中,编写实例化预设件的脚本
🎈🎈🎈要获取预设件的 kzb URL,在预设件 (Prefabs) 中右键点击预设件并选择复制 .kzb URL (Copy .kzb URL)。
🎈🎈🎈例如,要使用您在这个过程中创建的3D 按钮 (Button 3D) 实例化 3D 堆栈布局 (Stack Layout 3D) 中的 3D 文本块 (Text Block 3D) 预设件。
var layout = node.lookupNode('../Stack Layout 3D');
var item = instantiatePrefab('kzb://projectname/Prefabs/Text Block 3D', 'Text prefab');
layout.addChild(item);
- 写完脚本后,在脚本编辑器 (Script Editor) 中点击保存 (Save)。
- 触发该触发器以执行脚本
例如,如果您创建了一个按钮并使用按钮: 点击 (Button:Click) 触发器,则点击该按钮。