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

1.6 KiB
Raw Blame History

MeshRendererComponent::SetMaterialPath

按路径设置单个材质槽。

void SetMaterialPath(size_t index, const std::string& materialPath);

当前实现行为

  • 调用内部 EnsureMaterialSlot(index) 自动扩容槽位数组。
  • 清空该槽位旧的 pending async load并把 m_asyncMaterialLoadRequested[index] 复位为 false
  • 记录 m_materialPaths[index] = materialPath
  • 若路径为空,则同时重置 m_materials[index]m_materialRefs[index]
  • 若路径非空,则调用 ResourceManager::Get().Load<Resources::Material>(...) 尝试加载。
  • 然后调用 TryGetAssetRef(...) 试着把路径映射成项目资产引用。
  • 即使加载失败,路径也会保留。

重要语义

  • 这是一个同步设置接口,不是“只记录路径、等以后再加载”的接口。
  • 虚拟路径或内置路径也允许写入,但通常拿不到有效 AssetRef
  • 如果后续重新设置同一槽位,旧的异步状态会被显式丢弃。

使用建议

这比直接设置 handle 更适合:

  • 编辑器材质面板
  • 场景文本反序列化后的路径恢复
  • 希望保留稳定文本路径的工具链

如果调用方已经手里拿到了一个确定可用的材质句柄,并且希望以运行时对象为主写入,则可以考虑 SetMaterial

相关文档