一:前言
BaseMeshEffect继承了IMeshModifier,是用于实现网格效果的抽象基类,可以在子类继承并重写ModifyMesh方法去修改顶点数据,它与IMeshModifier没有太大的区别,只不过BaseMeshEffect类中定义了属性m_Graphic以及实现了IMeshModifier接口
Outline和Shadow都继承或间接继承了BaseMeshEffect
我们实现自己的网格效果时也尽量继承BaseMeshEffect类去实现而不是继承IMeshModifier接口
二:源码解析
可以子类继承BaseMeshEffect类重写ModifyMesh方法去修改顶点数据
在Graphic类的UpdateGeometry方法中首先调用了OnPopulateMesh方法将元素的顶点、颜色、UV等信息暂存到m_VertexHelper中,接着遍历身上继承了IMeshModifier的组件去调用ModifyMesh方法去更新m_VertexHelper数据,所以网格的绘制既可以写在OnPopulateMesh方法中也可以写在ModifyMesh方法中,只不过UGUI抽离出来一个IMeshModifier接口,它希望我们使用IMeshModifier这个接口来实现一些网格效果的变化,如阴影、描边、镜像等