使用Graphics.Blit更改Sprite的颜色
原理 :
利用public static void Blit (Texture source, Material mat, int pass= -1); 的mat参数:对材质的着色器进行后处理,来达到更改颜色的效果。
使用:
需要更改qunzi_2的颜色,更改颜色为随机,只需要提供sprite和材质球即可,效果如下:
C#代码:
#region 更换Sprite的颜色
public static Sprite ChangeSpriteColor(this Sprite sprite, Color newColor, Material mat)
{
// 获取 Sprite 的 Texture2D
Texture2D texture2D = sprite.texture;
// 将 Sprite 的 Texture2D 赋值给材质球的 _MainTex 属性
mat.SetTexture("_MainTex", texture2D);
// 设置需要替换的颜色
mat.SetColor("_Color", newColor);
// 创建 RenderTexture
RenderTexture renderTexture = new RenderTexture(texture2D.width, texture2D.height, depth: 0);
// 使用 Graphics.Blit 进行渲染
Graphics.Blit(texture2D, renderTexture, mat);
// 创建新的Sprite
Rect rect = new Rect(0, 0, texture2D.width, texture2D.height);
Sprite newSprite = Sprite.Create(renderTexture.ToTexture2D(),
rect,
new Vector2(0.5f, 0.5f),
sprite.pixelsPerUnit,
0,
SpriteMeshType.FullRect);
return newSprite;
}
#endregion
shader代码
Properties
{
_MainTex ("Texture", 2D) = "white" {}
_Color("_Color : 设置衣服的颜色,在没有上色步骤时使用", Color) = (1, 1, 1, 1)
...
}
...
fixed4 frag(v2f i) : SV_Target
{
//直接输出传入的颜色即可
fixed4 col = tex2D(_MainTex, i.uv);
col.rgb *= _Color;
return col;
}
...