Unity DOTS 安全检查:组件访问、结构变更与 Native 容器

Unity DOTS 安全检查:组件访问、结构变更与 Native 容器

Unity DOTS 安全检查:组件访问、结构变更与 Native 容器

DOTS 的风险入口不只在网络消息,还包括编辑器工具、资源导入和脚本桥接。组件与系统按数据访问模式划分,热路径保持 blittable,托管引用留在明确的桥接层。

先写清每个系统读写什么

为每个系统写清读写组件、更新组和依赖关系。结构变化集中到 EntityCommandBuffer,避免在遍历过程中直接增删组件;Job 中传入的 Native 容器要有清晰所有权。

DOTS 的正确性依赖显式的数据访问关系。系统何时读写组件、结构变更何时回放、Native 容器由谁释放,都应出现在系统声明或创建代码中,不能靠运行时“应该会处理”来解释。

三类所有权分别审查

  1. 组件访问声明区分只读与写入,Job 依赖覆盖同一组件上的冲突操作。
  2. 实体增删集中写入 EntityCommandBuffer,并在约定的系统组回放,不在遍历中直接改结构。
  3. Native 容器从创建点就确定释放方;场景卸载或系统禁用前等待相关 Job 完成。

安全检查报错时,可以沿组件、命令缓冲或容器所有权定位。若只能靠调整系统顺序让问题消失,还需要把真实依赖写进调度关系。

验证清单

打开 Jobs Debugger 与安全检查,覆盖空查询、实体增删、场景切换和系统禁用再启用;检查依赖是否完成、容器是否释放,以及同一帧的写入顺序是否稳定。

  • 构建中保留系统更新组、组件布局和 Native 容器创建位置的版本记录。
  • 系统禁用与场景切换时,确认 Job 已完成、命令缓冲已处置、容器只释放一次。
  • 新增结构变更路径后,用空查询和批量实体增删分别验证回放顺序。

Jobs 检查要覆盖场景切换

空查询、实体增删、场景切换和系统重启都要覆盖。依赖完成、容器释放和写入顺序能在工具中确认,才算守住边界。