Unity3D笔记——unity2d Sprite 泛白
2018-01-02 17:37
2146 查看
前言:Unity3D笔记是我平时做一些好玩的测试和研究,记录的笔记。会比较详细也可能随口一提就过了。 所以大家见谅了,内容一般都会是原创的(非原创我会注明转载)。由于很多内容其他的朋友也肯定研究发表过,欢迎大家指出错误
刚刚有个论坛的朋友,发了一个帖子。想要unity2d 中sprite 收到攻击后泛白。 我第一反应这个改下unity默认的shader 应该就可以了。于是想让图形学的同事帮忙写下。因为我也想知道怎么解决的,然后发现他 请假了。 于是急性子的我,去官网下载unity的内置着色器。开始捣鼓捣鼓研究了下,发现也蛮简单的。
我下的是:unity2017.2.0的版本。
解压后是这样的;
unity Sprite 用到的是:Sprites-Diffuse.shader;
然后这个shader 需要:UnitySprites.cginc 这个库。
所以我们复制下这两个脚本就可以了:
我改了下名字。
其中Sprites-Default_white的代码是这样的:里面的pass 也没写啥东西。 所以其shader的执行其实基本都在UnitySprites.cginc里。 我改了下路径:Sprite/Defaultwhite. Pass里: #include “UnitySprites2.cginc”用我们自己的库。
Shader "Sprites/Default_white" { Properties { [PerRendererData] _MainTex ("Sprite Texture", 2D) = "white" {} _Color ("Tint", Color) = (1,1,1,1) [MaterialToggle] PixelSnap ("Pixel snap", Float) = 0 [HideInInspector] _RendererColor ("RendererColor", Color) = (1,1,1,1) [HideInInspector] _Flip ("Flip", Vector) = (1,1,1,1) [PerRendererData] _AlphaTex ("External Alpha", 2D) = "white" {} [PerRendererData] _EnableExternalAlpha ("Enable External Alpha", Float) = 0 } SubShader { Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } Cull Off Lighting Off ZWrite Off Blend One OneMinusSrcAlpha Pass { CGPROGRAM #pragma vertex SpriteVert #pragma fragment SpriteFrag #pragma target 2.0 #pragma multi_compile_instancing #pragma multi_compile _ PIXELSNAP_ON #pragma multi_compile _ ETC1_EXTERNAL_ALPHA #include "UnitySprites2.cginc" ENDCG } } }
UnitySprites2.cginc 这个库。
改了这里: 在最后颜色输出的地方,直接将rgb=(1,1,1); 保留alpha 颜色都为白色。
#ifndef UNITY_SPRITES_INCLUDED #define UNITY_SPRITES_INCLUDED #include "UnityCG.cginc" #ifdef UNITY_INSTANCING_ENABLED UNITY_INSTANCING_CBUFFER_START(PerDrawSprite) // SpriteRenderer.Color while Non-Batched/Instanced. fixed4 unity_SpriteRendererColorArray[UNITY_INSTANCED_ARRAY_SIZE]; // this could be smaller but that's how bit each entry is regardless of type float4 unity_SpriteFlipArray[UNITY_INSTANCED_ARRAY_SIZE]; UNITY_INSTANCING_CBUFFER_END #define _RendererColor unity_SpriteRendererColorArray[unity_InstanceID] #define _Flip unity_SpriteFlipArray[unity_InstanceID] #endif // instancing CBUFFER_START(UnityPerDrawSprite) #ifndef UNITY_INSTANCING_ENABLED fixed4 _RendererColor; float4 _Flip; #endif float _EnableExternalAlpha; CBUFFER_END // Material Color. fixed4 _Color; struct appdata_t { float4 vertex : POSITION; float4 color : COLOR; float2 texcoord : TEXCOORD0; UNITY_VERTEX_INPUT_INSTANCE_ID }; struct v2f { float4 vertex : SV_POSITION; fixed4 color : COLOR; float2 texcoord : TEXCOORD0; UNITY_VERTEX_OUTPUT_STEREO }; v2f SpriteVert(appdata_t IN) { v2f OUT; UNITY_SETUP_INSTANCE_ID (IN); UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(OUT); #ifdef UNITY_INSTANCING_ENABLED IN.vertex.xy *= _Flip.xy; #endif OUT.vertex = UnityObjectToClipPos(IN.vertex); OUT.texcoord = IN.texcoord; OUT.color = IN.color* _Color * _RendererColor; #ifdef PIXELSNAP_ON OUT.vertex = UnityPixelSnap (OUT.vertex); #endif return OUT; } sampler2D _MainTex; sampler2D _AlphaTex; fixed4 SampleSpriteTexture (float2 uv) { fixed4 color = tex2D (_MainTex, uv); #if ETC1_EXTERNAL_ALPHA fixed4 alpha = tex2D (_AlphaTex, uv); color.a = lerp (color.a, alpha.r, _EnableExternalAlpha); #endif return color; } fixed4 SpriteFrag(v2f IN) : SV_Target { fixed4 c = SampleSpriteTexture (IN.texcoord) * IN.color; c.rgb =(1, 1, 1); c.rgb *= c.a; return c; } #endif // UNITY_SPRITES_INCLUDED
效果是这样的:
最后附上项目:
链接:https://pan.baidu.com/s/1o8yyqLk 密码:5ghd
相关文章推荐
- 【Unity3D基础教程】给初学者看的Unity教程(三):通过制作Flappy Bird了解Native 2D中的Sprite,Animation
- Unity2D Sprite灰白图(Unity3D开发之十一)
- 【Unity3d】关于unity2d的spriterender修改透明度方法
- UNITY 2D学习笔记(一):Sprite
- Unity3D工程转成Unity2D工程会引起Sprite 2D显示不出来,不知道是什么原因?
- 【个人UNITY笔记】{基础} 2D游戏中使用Shader或Camera解决Sprite前后遮挡关系
- Unity3D笔记第十五天——Unity2D技术
- 【Unity3D基础教程】给初学者看的Unity教程(三):通过制作Flappy Bird了解Native 2D中的Sprite,Animation
- Unity2D Sprite灰白图(Unity3D开发之十一)
- Unity中Sprite和Texture2D之间的关系。
- Unity 2d游戏学习笔记(一)--FeatureGeature插件导入
- Unity2d引入新功能SpriteAtlas,Sprite新的图集方式
- Unity + NGUI开发2D游戏的笔记。
- Unity3D之VR开发笔记@Oculus开发UNITY环境搭建
- Unity 2D Sprite
- sandy学习笔记:Sprite2D 对象
- unity2d,调整sprite透明度的方法
- Unity2D 之 Sprite点击事件
- 记录 Spine骨骼动画导入unity 步骤[unity3d 4.6.6版本 2d动画]
- Unity3D 2D动画插件EasyMotion2D (之十一)SpriteAnimationClip Editor