2.0 KiB
2.0 KiB
MeshRendererComponent::Serialize
序列化材质槽和渲染标志。
void Serialize(std::ostream& os) const override;
当前实现行为
当前实现会先准备两份待写出的槽位数组:
serializedRefsserializedPaths
对每个槽位,处理规则是:
- 若当前
AssetRef无效、materialPath非空、且路径不是 virtual scheme,则再尝试一次TryGetAssetRef(...) - 若该槽位最终有有效
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 资源进入项目资产数据库。