现在项目里有个需求,使用spine的怪物在受击时需要更换spine使用到的材质来做受击表现,同时刻存在着大量的更换需求。通过性能分析发现换材质这个事情非常卡顿,查看源码发现在修改skeleton.customMaterial材质的时候,会触发updateMaterial将其_materialCache全都清空了,这时这个skeleton渲染材质的时候就会new一个MaterialInstance出来,就涉及到了一系列的材质解析。
目前对整套材质渲染还没有那么熟,想了个方案,修改源码,只要skeleton设置过的材质都在引擎层全局共享,下次需要用时如果有就直接使用缓存materialInstance,这样就可以不需要不必要的解析了。目前项目里的所有spine材质球也不会去修改其参数,最多修改的也只有顶点颜色,此属性应该也不属于materialInstance
1.为什么引擎目前是这样的实现方案,有其他的复杂因素吗
2.我初想的方案是否可行