Hello, thank you very much for your answer!
However, I know a little about shader and I've tried to find out a solution or maybe the source of the problem.
As I noticed the problem was only on the Iphone that used metal as rendering so the problem was in there.
In your tileset shader the Z-Write directive was missing, so I've tried to recreate your shader in Amplify Shader fixing the Z-Write adding in the subshader:
ZWrite Off
ZTest LEqual
I've read online that Unity has some issues when translating the code from HSLS to Metal, causing some issues in particular with transparent shaders and Zwrite issues related.
Here is the Shader Code (It is generated by Amplify Shader so some variables names are odd, but you can modify them as you want):
Shader "Map"
{
Properties
{
_MainTex("MainTex", 2D) = "white" {}
_OverlayBackTex("OverlayBackTex", 2D) = "black" {}
_TrafficTex("TrafficTex", 2D) = "black" {}
_OverlayFrontTex("OverlayFrontTex", 2D) = "black" {}
_OverlayBackAlpha("OverlayBackAlpha", Range( 0 , 1)) = 1
_OverlayFrontAlpha("OverlayFrontAlpha", Range( 0 , 1)) = 1
_Color("Color", Color) = (1,1,1,1)
}
SubShader
{
Tags{ "RenderType" = "Custom" "Queue" = "Transparent+0" "IgnoreProjector" = "True" "IsEmissive" = "true" }
Cull Back
ZWrite Off
ZTest LEqual
CGPROGRAM
#pragma target 3.0
#pragma surface surf Unlit keepalpha noshadow
struct Input
{
float2 uv_texcoord;
};
uniform sampler2D _MainTex;
uniform float4 _MainTex_ST;
uniform sampler2D _OverlayBackTex;
uniform float4 _OverlayBackTex_ST;
uniform float _OverlayBackAlpha;
uniform sampler2D _TrafficTex;
uniform float4 _TrafficTex_ST;
uniform sampler2D _OverlayFrontTex;
uniform float4 _OverlayFrontTex_ST;
uniform float _OverlayFrontAlpha;
uniform float4 _Color;
inline half4 LightingUnlit( SurfaceOutput s, half3 lightDir, half atten )
{
return half4 ( 0, 0, 0, s.Alpha );
}
void surf( Input i , inout SurfaceOutput o )
{
float2 uv_MainTex = i.uv_texcoord * _MainTex_ST.xy + _MainTex_ST.zw;
float4 tex2DNode1 = tex2D( _MainTex, uv_MainTex );
float4 appendResult12 = (float4(tex2DNode1.r , tex2DNode1.g , tex2DNode1.b , 0.0));
float2 uv_OverlayBackTex = i.uv_texcoord * _OverlayBackTex_ST.xy + _OverlayBackTex_ST.zw;
float4 tex2DNode3 = tex2D( _OverlayBackTex, uv_OverlayBackTex );
float4 appendResult11 = (float4(tex2DNode3.r , tex2DNode3.g , tex2DNode3.b , 0.0));
float4 lerpResult9 = lerp( appendResult12 , appendResult11 , ( tex2DNode3.a * _OverlayBackAlpha ));
float2 uv_TrafficTex = i.uv_texcoord * _TrafficTex_ST.xy + _TrafficTex_ST.zw;
float4 tex2DNode6 = tex2D( _TrafficTex, uv_TrafficTex );
float4 appendResult16 = (float4(tex2DNode6.r , tex2DNode6.g , tex2DNode6.b , 0.0));
float4 lerpResult13 = lerp( lerpResult9 , appendResult16 , tex2DNode6.a);
float2 uv_OverlayFrontTex = i.uv_texcoord * _OverlayFrontTex_ST.xy + _OverlayFrontTex_ST.zw;
float4 tex2DNode7 = tex2D( _OverlayFrontTex, uv_OverlayFrontTex );
float4 appendResult18 = (float4(tex2DNode7.r , tex2DNode7.g , tex2DNode7.b , 0.0));
float4 lerpResult17 = lerp( lerpResult13 , appendResult18 , ( tex2DNode7.a * _OverlayFrontAlpha ));
o.Emission = ( lerpResult17 * _Color ).xyz;
o.Alpha = ( _Color.a * tex2DNode1.a );
}
ENDCG
}
Hope it can be of help!