这里可能会发生一些事情,如另一个答案中所述,可能是您的平铺
无论您使用哪个坐标系,您的纹理的 UV 范围始终为 0 -> 1,但是根据系统,您的 UV 将是以下 2 之一:
0,0 在左下角,1,1 在右上角或
0,0 在左上角,1,1 在右下角。 (注意:这是指 UV 落在纹理上的位置,而不是与模型上的顶点相关的 UV。)
因此,当您的平铺设置为 0,0 时,您说的是 uv.x * 0 和 uv.y * 0,这将在着色器用于确定的数学计算之后将所有 UV 的值默认为 0该纹素使用哪种颜色,它总是相同的。
一个可能发生这种情况的简单示例是平铺,因为如果我们的顶点的值为 (0.73, 0.82),我们正在缩放 UV 值(当平铺 > 0 时会缩小纹理视图),并且我们正在缩放乘以 2,该值将变为 (1.46, 1.64)。
现在根据我们的示例,如果您使用 > 1 的值,则在纹理方面有两件事需要注意,它们是您的 UV 值和您的 TextureWrap 设置。由于所有纹理都基于 0 -> 1 范围,因此 1.46 的值更大。处理方式取决于纹理检查器中的 TextureWrapMode 设置。您可以在以下位置阅读更多信息:https://docs.unity3d.com/ScriptReference/TextureWrapMode.html
总而言之,如果你想要一个平铺纹理将其设置为重复,不这样做并使用钳制,会将你的 UV 钳制为 0 -> 1,任何大于 1 的东西都将设置为 1,你将面临与将平铺设置为 0 的情况相同。
简而言之,将平铺设置为 1,1,并确保针对用例正确设置纹理检查器设置。
我的方法是:设置纹理以在检查器中重复,然后调整平铺直到看起来不错(同时平铺太多也可以使其看起来都显示相同的颜色)。
这当然只有在您的模型确实分配了 UV 时才能解决问题。您可以查看OBJ格式规范,并用记事本查看文件以确定它是否有UV的设置。