面向读者

验证等级

配置编译与完整性验证通过。 程序解析三个本地资源,检查依赖 DAG 与 SHA-256,写入 临时 Lock 并验证全部三个资源。它不会在 PyBullet 中加载 OBJ,也不宣称原生渲染或 物理验收通过。

文件说明

  • run.yaml 创建一个资源包对象实例。
  • main.py 通过公开 API 检查资源并验证 Lock。
  • ../catalog/resource_bundle.yaml 声明资源职责、格式、摘要与依赖。
  • ../catalog/assets/bundle/ 保存极小的演示 OBJ/MTL 文件。

理解 Manifest

yaml
resources:
  material:
    uri: assets/bundle/visual.mtl
    format: model/mtl
    role: material
    sha256: ...
  visual:
    uri: assets/bundle/visual.obj
    format: model/obj
    role: visual
    sha256: ...
    dependencies: [material]
  collision:
    uri: assets/bundle/collision.obj
    format: model/obj
    role: collision
    sha256: ...

资源名称是稳定的局部键。role 告诉使用者资源用途;format 明确声明格式,而不是靠 扩展名猜测。dependencies 引用同组件中的其他资源,并且必须形成无环图。本例是 visual → material,collision 独立。每个 SHA-256 都固定准确文件内容。

理解 Run

yaml
bundled_prop:
  use: object://fastsim/component-demo-resource-bundle

Run 选择逻辑产品,而不是逐个选择文件。编译会在 Project 可信根内解析所选 Variant 的完整资源包,并把准确资源写入不可变计划。

运行

bash
fastsim config validate run.yaml --json
mkdir -p output
fastsim config lock run.yaml --output output/component-bundle.lock.yaml
fastsim config verify-lock output/component-bundle.lock.yaml --json
python main.py

预期 Python 输出列出 collisionmaterialvisual,且只有 visual 依赖 material。最后输出:

text
Lock valid: True
Checked resources: 3

Python 程序使用临时目录,因此不会在源码旁留下生成的 Lock。

常见错误

  • 依赖名称不是同组件中的资源:编译会拒绝。
  • 创建依赖环:资源顺序必须构成 DAG。
  • 修改资产却不更新 Manifest 和 Registry 摘要:加载或 Lock 验证会按设计失败。
  • 对带凹结构的视觉物品直接共用一个模型、却没有设计碰撞资产:视觉几何与碰撞几何 职责不同。
  • 把有效 Lock 当成原生验收:它证明身份和字节内容,不证明仿真器行为。

上一节:11 — 后端 Variant · 返回组件示例总览