diff --git a/Assets/Resources/Shaders/FairyGUI-Image-URP.shader b/Assets/Resources/Shaders/FairyGUI-Image-URP.shader
new file mode 100644
index 00000000..e5c27b46
--- /dev/null
+++ b/Assets/Resources/Shaders/FairyGUI-Image-URP.shader
@@ -0,0 +1,198 @@
+// Upgrade NOTE: replaced '_Object2World' with 'unity_ObjectToWorld'
+// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'
+
+Shader "FairyGUI/Image-URP"
+{
+ Properties
+ {
+ _MainTex ("Base (RGB), Alpha (A)", 2D) = "black" {}
+
+ _StencilComp ("Stencil Comparison", Float) = 8
+ _Stencil ("Stencil ID", Float) = 0
+ _StencilOp ("Stencil Operation", Float) = 0
+ _StencilWriteMask ("Stencil Write Mask", Float) = 255
+ _StencilReadMask ("Stencil Read Mask", Float) = 255
+
+ _ColorMask ("Color Mask", Float) = 15
+
+ _BlendSrcFactor ("Blend SrcFactor", Float) = 5
+ _BlendDstFactor ("Blend DstFactor", Float) = 10
+ }
+
+ SubShader
+ {
+ LOD 100
+
+ Tags
+ {
+ "Queue" = "Transparent+2"
+ "IgnoreProjector" = "True"
+ "RenderType" = "Transparent"
+ }
+
+ Stencil
+ {
+ Ref [_Stencil]
+ Comp [_StencilComp]
+ Pass [_StencilOp]
+ ReadMask [_StencilReadMask]
+ WriteMask [_StencilWriteMask]
+ }
+
+ Cull Off
+ Lighting Off
+ ZWrite Off
+ Fog
+ {
+ Mode Off
+ }
+ Blend [_BlendSrcFactor] [_BlendDstFactor], One One
+ ColorMask [_ColorMask]
+
+ Pass
+ {
+ HLSLPROGRAM
+ // #pragma multi_compile_instancing
+ #pragma multi_compile NOT_COMBINED COMBINED
+ #pragma multi_compile NOT_GRAYED GRAYED COLOR_FILTER
+ #pragma multi_compile NOT_CLIPPED CLIPPED SOFT_CLIPPED ALPHA_MASK
+ #pragma vertex vert
+ #pragma fragment frag
+
+ #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
+
+ struct appdata_t
+ {
+ float4 vertex : POSITION;
+ half4 color : COLOR;
+ float4 texcoord : TEXCOORD0;
+ // UNITY_VERTEX_INPUT_INSTANCE_ID
+ };
+
+ half3 GammaToLinearSpace(half3 sRGB)
+ {
+ return sRGB * (sRGB * (sRGB * 0.305306011h + 0.682171111h) + 0.012522878h);
+ }
+
+ struct v2f
+ {
+ float4 vertex : SV_POSITION;
+ half4 color : COLOR;
+ float4 texcoord : TEXCOORD0;
+
+ #ifdef CLIPPED
+ float2 clipPos : TEXCOORD1;
+ #endif
+
+ #ifdef SOFT_CLIPPED
+ float2 clipPos : TEXCOORD1;
+ #endif
+ // UNITY_VERTEX_INPUT_INSTANCE_ID
+ // UNITY_VERTEX_OUTPUT_STEREO
+ };
+
+
+ #ifdef COMBINED
+ sampler2D _AlphaTex;
+ #endif
+
+ float4 _ClipBox = float4(-2, -2, 0, 0);
+ #ifdef SOFT_CLIPPED
+ float4 _ClipSoftness = float4(0, 0, 0, 0);
+ #endif
+
+ CBUFFER_START(UnityPerMaterial)
+ sampler2D _MainTex;
+ CBUFFER_END
+
+ // UNITY_INSTANCING_BUFFER_START(UnityPerMaterial)
+ // UNITY_DEFINE_INSTANCED_PROP(float4, _BaseMap_ST)
+ // UNITY_INSTANCING_BUFFER_END(UnityPerMaterial)
+
+
+ #ifdef COLOR_FILTER
+ float4x4 _ColorMatrix;
+ float4 _ColorOffset;
+ float _ColorOption = 0;
+ #endif
+
+ v2f vert(appdata_t v)
+ {
+ // UNITY_SETUP_INSTANCE_ID(v);
+ v2f o;
+ o.vertex = TransformWorldToHClip(TransformObjectToWorld(v.vertex.xyz));
+ o.texcoord = v.texcoord;
+ #if !defined(UNITY_COLORSPACE_GAMMA) && (UNITY_VERSION >= 550)
+ o.color.rgb = GammaToLinearSpace(v.color.rgb);
+ o.color.a = v.color.a;
+ #else
+ o.color = v.color;
+ #endif
+
+ #ifdef CLIPPED
+ o.clipPos = mul(unity_ObjectToWorld, v.vertex).xy * _ClipBox.zw + _ClipBox.xy;
+ #endif
+
+ #ifdef SOFT_CLIPPED
+ o.clipPos = mul(unity_ObjectToWorld, v.vertex).xy * _ClipBox.zw + _ClipBox.xy;
+ #endif
+
+ // UNITY_TRANSFER_INSTANCE_ID(v, o);
+ return o;
+ }
+
+ half4 frag(v2f i) : SV_Target
+ {
+ // UNITY_SETUP_INSTANCE_ID(i);
+ half4 col = tex2D(_MainTex, i.texcoord.xy / i.texcoord.w) * i.color;
+
+ #ifdef COMBINED
+ col.a *= tex2D(_AlphaTex, i.texcoord.xy / i.texcoord.w).g;
+ #endif
+
+ #ifdef GRAYED
+ col.rgb = dot(col.rgb, half3(0.299, 0.587, 0.114));
+ #endif
+
+ #ifdef SOFT_CLIPPED
+ float2 factor = float2(0,0);
+ if(i.clipPos.x<0)
+ factor.x = (1.0-abs(i.clipPos.x)) * _ClipSoftness.x;
+ else
+ factor.x = (1.0-i.clipPos.x) * _ClipSoftness.z;
+ if(i.clipPos.y<0)
+ factor.y = (1.0-abs(i.clipPos.y)) * _ClipSoftness.w;
+ else
+ factor.y = (1.0-i.clipPos.y) * _ClipSoftness.y;
+ col.a *= clamp(min(factor.x, factor.y), 0.0, 1.0);
+ #endif
+
+ #ifdef CLIPPED
+ float2 factor = abs(i.clipPos);
+ col.a *= step(max(factor.x, factor.y), 1);
+ #endif
+
+ #ifdef COLOR_FILTER
+ if (_ColorOption == 0)
+ {
+ half4 col2 = col;
+ col2.r = dot(col, _ColorMatrix[0]) + _ColorOffset.x;
+ col2.g = dot(col, _ColorMatrix[1]) + _ColorOffset.y;
+ col2.b = dot(col, _ColorMatrix[2]) + _ColorOffset.z;
+ col2.a = dot(col, _ColorMatrix[3]) + _ColorOffset.w;
+ col = col2;
+ }
+ else //premultiply alpha
+ col.rgb *= col.a;
+ #endif
+
+ #ifdef ALPHA_MASK
+ clip(col.a - 0.001);
+ #endif
+
+ return col;
+ }
+ ENDHLSL
+ }
+ }
+}
\ No newline at end of file
diff --git a/Assets/Resources/Shaders/FairyGUI-Image-URP.shader.meta b/Assets/Resources/Shaders/FairyGUI-Image-URP.shader.meta
new file mode 100644
index 00000000..1611964a
--- /dev/null
+++ b/Assets/Resources/Shaders/FairyGUI-Image-URP.shader.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 2b6fa34b92064d8aa3d62474d3f39297
+ShaderImporter:
+ externalObjects: {}
+ defaultTextures: []
+ nonModifiableTextures: []
+ preprocessorOverride: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/Shaders/FairyGUI-Text-URP.shader b/Assets/Resources/Shaders/FairyGUI-Text-URP.shader
new file mode 100644
index 00000000..c74c814e
--- /dev/null
+++ b/Assets/Resources/Shaders/FairyGUI-Text-URP.shader
@@ -0,0 +1,98 @@
+// Upgrade NOTE: replaced '_Object2World' with 'unity_ObjectToWorld'
+// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'
+
+Shader "FairyGUI/Text-URP"
+{
+ Properties
+ {
+ _MainTex ("Alpha (A)", 2D) = "white" {}
+
+ _ColorMask ("Color Mask", Float) = 15
+
+ _BlendSrcFactor ("Blend SrcFactor", Float) = 5
+ _BlendDstFactor ("Blend DstFactor", Float) = 10
+ }
+
+ SubShader
+ {
+ LOD 100
+
+ Tags
+ {
+ "Queue" = "Transparent+3"
+ "IgnoreProjector" = "True"
+ "RenderType" = "Transparent"
+ }
+
+
+ Cull Off
+ Lighting Off
+ ZWrite Off
+ Fog
+ {
+ Mode Off
+ }
+ Blend [_BlendSrcFactor] [_BlendDstFactor]
+ ColorMask [_ColorMask]
+
+ Pass
+ {
+ HLSLPROGRAM
+ #pragma multi_compile NOT_GRAYED GRAYED
+ #pragma vertex vert
+ #pragma fragment frag
+
+ #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
+
+ struct appdata_t
+ {
+ float4 vertex : POSITION;
+ half4 color : COLOR;
+ float4 texcoord : TEXCOORD0;
+ };
+
+ struct v2f
+ {
+ float4 vertex : SV_POSITION;
+ half4 color : COLOR;
+ float4 texcoord : TEXCOORD0;
+ };
+
+ half3 GammaToLinearSpace(half3 sRGB)
+ {
+ return sRGB * (sRGB * (sRGB * 0.305306011h + 0.682171111h) + 0.012522878h);
+ }
+
+
+ sampler2D _MainTex;
+
+ v2f vert(appdata_t v)
+ {
+ v2f o;
+ o.vertex = TransformWorldToHClip(TransformObjectToWorld(v.vertex.xyz));
+ o.texcoord = v.texcoord;
+ #if !defined(UNITY_COLORSPACE_GAMMA) && (UNITY_VERSION >= 550)
+ o.color.rgb = GammaToLinearSpace(v.color.rgb);
+ o.color.a = v.color.a;
+ #else
+ o.color = v.color;
+ #endif
+
+ return o;
+ }
+
+ half4 frag(v2f i) : SV_Target
+ {
+ half4 col = i.color;
+ col.a *= half(tex2D(_MainTex, i.texcoord.xy).a);
+
+ #ifdef GRAYED
+ col.rgb = dot(col.rgb, half3(0.299, 0.587, 0.114));
+ #endif
+
+ return col;
+ }
+ ENDHLSL
+ }
+ }
+}
\ No newline at end of file
diff --git a/Assets/Resources/Shaders/FairyGUI-Text-URP.shader.meta b/Assets/Resources/Shaders/FairyGUI-Text-URP.shader.meta
new file mode 100644
index 00000000..32794c40
--- /dev/null
+++ b/Assets/Resources/Shaders/FairyGUI-Text-URP.shader.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 64ad1e3d6f9d423eab32d6cfb15b3f5c
+timeCreated: 1659701749
\ No newline at end of file
diff --git a/Assets/Scripts/Core/ShaderConfig.cs b/Assets/Scripts/Core/ShaderConfig.cs
index da77dd56..ec82bcc4 100644
--- a/Assets/Scripts/Core/ShaderConfig.cs
+++ b/Assets/Scripts/Core/ShaderConfig.cs
@@ -22,12 +22,20 @@ public static class ShaderConfig
///
///
///
+#if UNITY_2019_1_OR_NEWER
+ public static string imageShader = "FairyGUI/Image-URP";
+#else
public static string imageShader = "FairyGUI/Image";
+#endif
///
///
///
+#if UNITY_2019_1_OR_NEWER
+ public static string textShader = "FairyGUI/Text-URP";
+#else
public static string textShader = "FairyGUI/Text";
+#endif
///
///