Files
XCEngine/docs/api/XCEngine/Components/MeshRendererComponent/Serialize.md

2.0 KiB
Raw Blame History

MeshRendererComponent::Serialize

序列化材质槽和渲染标志。

void Serialize(std::ostream& os) const override;

当前实现行为

当前实现会先准备两份待写出的槽位数组:

  • serializedRefs
  • serializedPaths

对每个槽位,处理规则是:

  1. 若当前 AssetRef 无效、materialPath 非空、且路径不是 virtual scheme则再尝试一次 TryGetAssetRef(...)
  2. 若该槽位最终有有效 AssetRef,或路径本来就不是 virtual scheme则把 serializedPaths[i] 清空

然后按槽位顺序输出:

materialPaths=<slot0|slot1|...>;
materialRefs=<slot0|slot1|...>;
castShadows=1;
receiveShadows=1;
renderLayer=0;

当前序列化结果

项目材质槽

如果某槽位绑定的是项目材质 Assets/runtime.material,且能解析出有效 AssetRef,常见输出会像:

materialPaths=;
materialRefs=<guid,localId,resourceType>;

也就是说:

  • 不会再把普通项目路径当正式场景数据保留下来

builtin / virtual path 槽

如果某槽位绑定的是 builtin://materials/default-primitive,而它没有项目资产 AssetRef,则常见输出会像:

materialPaths=builtin://materials/default-primitive;
materialRefs=;

关键语义

  • 当前不再输出旧的 materials=
  • 项目资产材质的正式场景身份是 materialRefs
  • materialPaths 现在主要承担 virtual path 回退职责
  • 会保留尾部空槽位,避免反序列化后材质槽数量缩水

设计说明

这种设计和 MeshFilterComponent 的协议方向一致:

  • 项目资源走稳定 AssetRef
  • builtin / 虚拟资源走显式协议路径

这样既能提高资源改名、移动后的恢复成功率,也不会强迫 virtual 资源进入项目资产数据库。

相关文档