最近一个需求,需要在Runtime下 更改一个MaterialInstance的Parent材质,并且将修改后的MaterialInstance应用到所有用到该MaterialInstance的对象上。
听到这个需求 第一反应还是遍历场景所有Actor,当然 遍历不太好, 于是就开始翻源码,找到MaterialInstance的一个protected函数void SetParentInternal(class UMaterialInterface* NewParent, bool RecacheShaders); 然后根据这个函数折腾了一下子没有达到我的需求,于是 又开始读源码, 终于找到了一条捷径!
三行代码搞定:
MatInst->Parent = OtherMatInst->Parent;
FMaterialUpdateContext MaterialUpdateContext;
MaterialUpdateContext.AddMaterialInstance(MatInst);