首页 > 其他分享 >使用Graphics.Blit更改Sprite的颜色

使用Graphics.Blit更改Sprite的颜色

时间:2023-05-31 19:14:20浏览次数:45  
标签:颜色 mat Color Blit texture2D Graphics Sprite

原理 :

利用public static void Blit (Texture source, Material mat, int pass= -1); 的mat参数:对材质的着色器进行后处理,来达到更改颜色的效果。

使用:

image

需要更改qunzi_2的颜色,更改颜色为随机,只需要提供sprite和材质球即可,效果如下:

image

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;
            }
            ...

标签:颜色,mat,Color,Blit,texture2D,Graphics,Sprite
From: https://www.cnblogs.com/948245132ljx/p/17447058.html

相关文章

  • 图形学流体力学Fluid Simulation for Computer Graphics
    从水的飞溅,到火焰和烟雾的旋转,流体已经成为计算机图形学的一个重要组成部分。这本书旨在涵盖模拟这些动画效果的基本知识。让我们来看看控制它们运动的基本方程。动画中大多数有趣的流体流动都是由著名的incompressibleNavier-Stokes方程控制的。>>fluidenginedevelopment>>......
  • NVRM: Xid (PCI:0000:b1:00): 13, pid=1375637, Graphics SM Global Exception on (GP
    显卡服务器中一个显卡崩溃了:May1605:38:58dellkernel:[14244871.006970]NVRM:Xid(PCI:0000:b1:00):13,pid=1375637,GraphicsSMWarpExceptionon(GPC0,TPC0,SM0):IllegalInstructionEncodingMay1605:38:58dellkernel:[14244871.010256]NVRM:Xid(PC......
  • 【Cocos2d游戏开发之九】CCSpriteBatchNode与"pvr.ccz","plist"精灵优化及注意事项
     首先对于使用过精灵的童鞋很熟悉CCSpriteBatchNode,至少大家都会知道它能优化精灵,但是至于优化原理这里简单说下:      一般使用精灵CCSprite的时候,都是直接使用[CCLayer*addChild:CCSprite*];,假设我们创建一百个精灵,那么当前的CCLayer会为100个精灵单独绘制;  ......
  • Gdiplus::Graphics::DrawString绘制文字
     Gdiplus::FontFamilyfontfm(_T("微软雅黑"));Gdiplus::Fontfont(&fontfm,24,Gdiplus::FontStyleBold,Gdiplus::UnitPixel);/*参数1:FontFamilyfamily字体,如我们常见的“宋体”、“仿宋”、“微软雅黑”、“Arial”等参数2:floatemSize......
  • CSS Sprites合并多个小图片
     这种方法看似繁琐,但却是非常有实用价值的。首先,CSSSprites能较少HTTP请求次数。我们知道,HTTP请求数对网站的工作性能有较大关联。如果背景图分开存放,每一次调用都会产生HTTP请求,一定程度上增加了服务器的负担。而单个背景图的设计方法,只需请求一次即可取回背景图片。很多......
  • unity Sprite中的Pixels Per Unit
    unity中最小的网格就是1unit。1unit默认是1米。1Unityunit=1meter(100cm)对于一个16*16像素的图片,如果我们将其PixelsPerUnit设置为16,那么这张图片的长宽都是1unit。在unity中刚好契合最小的格子。......
  • Gitblit在Windows服务器下搭建及使用
    介绍Gitblit是一个纯Java库用来管理、查看和处理Git资料库。小团队用来管理代码非常合适,既满足私有库的要求,绑定域名后又可基于互联网进行管理。 一、下载官网地址:http://www.gitblit.com/ 二、安装1)配置,进入目录:“C:\Tools\gitblit-1.9.1\data”2)打开defaults.proper......
  • nginx-lua-fastdfs-GraphicsMagick整合
      无意发现了一个不错的分布式文件系统。fastdfs开源的分布式文件系统,此脚本利用nginxlua模块,动态生成图片缩略图,fastdfs只存一份原图。lua通过socket获取fastdfs的原图,并存放到本地,根据不同规则url,例如:_60x60.jpg、_80x80.jpg,类似淘宝图片url规则。利用gm命令生成本地缩略图......
  • GraphicsLayer 可以在一个图层上绘制多个的多边形
    ArcGISforJS的GraphicsLayer可以在一个图层上绘制多个的多边形¹。你可以使用Polygon类来创建多边形的几何对象,然后使用Graphic类来将几何对象和符号对象组合成图形对象,最后使用GraphicsLayer的add()方法或者addMany()方法来将图形对象添加到图层上。创建一个Graph......
  • Unigraphics NX(UG NX)1957 安装包下载及(UG NX)1957 安装教程
    UG(UnigraphicsNX)是SiemensPLMSoftware公司出品的一个产品工程解决方案,它为用户的产品设计及加工过程提供了数字化造型和验证手段。UnigraphicsNX针对用户的虚拟产品设计和工艺设计的需求,以及满足各种工业化需求,提供了经过实践验证的解决方案。UG同时也是用户指南(userguide)和普......