今天在工作任务中出现了一个仅在Metal平台的Shader报错,这个报错会造成应用该Shader的材质在Mac平台直接消失。
报错如下:
Metal:Fragment input(s) mismatching vertex shader output type(s) or not written by vertex shader
经查明发现造成这个问题的原因是有一个宏定义的方式是shader_feature_local_fragment,但是这个宏应用在了从vertex shader到fragment shader传递的结构体v2f中。
这个问题在Win平台Unity支持的所有平台编译版本中都不会出现问题。即便在Shader的Inspector选项里Compiled Code选择All Platforms或者Custom里包含Metal平台,之后点击Compile and show code都不会有任何的报错。
测试之后发现如果单纯设置为shader_feature_local就可以解决问题,猜测是Metal平台的编译更加严格,_fragment或者_vertex后缀的宏在Metal平台并不会被应用到结构体中。要么在结构体中不使用此类宏定义,要么在宏定义中去掉该后缀
粒子进入Timeline后不能随机的问题C# unsafe code (1)