在 Unity 中,着色器程序是用 HLSL 语言的一个变种(也称为 Cg,但对于大部分实际使用情况,这两种语言没有区别)编写的。
目前,为了在不同平台之间实现最大程度的可移植性,请使用 DX9 风格的 HLSL 编写程序(例如,使用 DX9 风格的 sampler2D
和 tex2D
进行纹理采样,而不是使用 DX10 风格的 Texture2D
、SamplerState
和 tex.Sample
)。
在内部将使用不同的着色器编译器来编译着色器程序:
#pragma prefer_hlsl2glsl gles
实现的如果确实需要确定正在使用哪个编译器(为了使用仅一种编译器支持的 HLSL 语法,或解决编译器错误),可以使用预定义的着色器宏。例如,使用 HLSL 编译器进行编译时设置 UNITY_COMPILER_HLSL
(针对 D3D 或 GLCore/GLES3/GLES 平台);通过 hlsl2glsl 进行编译时设置 UNITY_COMPILER_HLSL2GLSL
。