[Shader]暗黑3血条效果2

<1>效果图

<2>源码

Shader "UI/UI2"
{
Properties
{
[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {}
_Noise("_Noise Texture", 2D) = "white" {}
_Color("Tint", Color) = (1,1,1,1)

_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

//My
_Speed("速度",Range(0,1)) = 1
_Fill("高度",Range(0,1)) = 1
_Conc("浓度",Range(1,5)) = 1
_Trans("透明度",Range(0,1)) = 1
_BlendX("混合贴图X",2D) = "white" {}
_BlendY("混合贴图Y",2D) = "white" {}

[Toggle(UNITY_UI_ALPHACLIP)] _UseUIAlphaClip("Use Alpha Clip", Float) = 0
}

SubShader
{
Tags
{
"Queue" = "Transparent"
"IgnoreProjector" = "True"
"RenderType" = "Transparent"
"PreviewType" = "Plane"
"CanUseSpriteAtlas" = "True"
}

Stencil
{
Ref[_Stencil]
Comp[_StencilComp]
Pass[_StencilOp]
ReadMask[_StencilReadMask]
WriteMask[_StencilWriteMask]
}

Cull Off
Lighting Off
ZWrite Off
ZTest[unity_GUIZTestMode]
Blend SrcAlpha OneMinusSrcAlpha
ColorMask[_ColorMask]

Pass
{
Name "Default"
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma target 2.0

#include "UnityCG.cginc"
#include "UnityUI.cginc"

#pragma multi_compile __ UNITY_UI_ALPHACLIP
#define PI 3.1415926

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;
float4 worldPosition : TEXCOORD1;
UNITY_VERTEX_OUTPUT_STEREO
};

fixed4 _Color;
fixed4 _TextureSampleAdd;
float4 _ClipRect;
float _Speed;
float _Fill;
float _Conc;
float _Trans;

v2f vert(appdata_t IN)
{
v2f OUT;
UNITY_SETUP_INSTANCE_ID(IN);
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(OUT);
OUT.worldPosition = IN.vertex;
OUT.vertex = UnityObjectToClipPos(OUT.worldPosition);

OUT.texcoord = IN.texcoord;

OUT.color = IN.color * _Color;
return OUT;
}

sampler2D _MainTex;
sampler2D _Noise;
sampler2D _GrabTexture;
sampler2D _BlendX;
sampler2D _BlendY;

fixed4 frag(v2f IN) : SV_Target
{
half2 uv = IN.texcoord;
half4 col = IN.color;
_Speed = _Speed*0.1;

//采样噪声图
half4 no1 = tex2D(_Noise, uv + _Time.xz*_Speed);
half4 no2 = tex2D(_Noise, uv - _Time.zx*_Speed);
half4 no3 = tex2D(_Noise, uv - _Time.yz*_Speed);

if (_Fill - uv.y < 0.02) {
_Color *= 20;
//_Color. = 0;
_Color.b = 0;
_Color.a = sin(_Time.y%PI);
}

col.a = uv.y > _Fill ? 0 : col.a;
col.a *= _Trans;

half4 color = (tex2D(_MainTex, uv)*tex2D(_BlendX, float2(no1.x,no2.x))*tex2D(_BlendY, uv*float2(no2.x,no3.x))*_Color + _TextureSampleAdd);
color.a *= UnityGet2DClipping(IN.worldPosition.xy, _ClipRect);
color.a *= col.a;
#ifdef UNITY_UI_ALPHACLIP
clip(color.a - 0.001);
#endif

return color;
}
ENDCG
}
}
}

时间: 2024-11-09 00:12:47

[Shader]暗黑3血条效果2的相关文章

quick-cocos2d-x教程10:实现血条效果。

血条是常见功能,可以通过一个血条背景和一个不断改变的血条宽度,来实现少血. 在MainScence.lua中,先改代码: function MainScene:ctor() local bg = display.newSprite("bg01.jpg") bg:setPosition(display.cx, display.cy) self:addChild(bg) -- local barBg = display.newSprite("barBg.png") ba

[Unity3D]Unity3D再叙NGUI之血条及技能冷却效果

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 喜欢我的博客请记住我的名字:秦元培,我的博客地址是blog.csdn.net/qinyuanpei. 转载请注明出处,本文作者:

Shader实例:NGUI制作网格样式血条

效果: 思路: 1.算出正确的uv去采样过滤图,上一篇文章说的很明白了.Shader实例:NGUI图集中的UISprite正确使用Shader的方法 2.用当前血量占总血量的百分比来设置shader中的变量,来控制血条的裁剪. 实际操作中,在shader中声明一个uniform float _Factor 然后在C#脚本中,对这个变量进行设置,结果发现,界面上不能实时响应这个值,进行正确的裁剪. 那么我只好牺牲color的一个分量,比如设置g分量,shader中用g分量的值来对血条进行裁剪.最终

【FairyGUI &amp; Unity】使用动效功能实现血条UI扣血与加血的缓动效果

原理 血条使用进度条组件,可以得到当前值与最大值. 通过动效-改变缩放可以让图片宽度从1到0按百分比变化. 动效可以指定播放动效的时间范围 组件设计 创建一个进度条组件,作为血条. bar是实际血量条 DownBar是扣血缓动背景图层 UpBar是加血缓动背景图层 LowBar是低血量变色(和控制器配合,本文不讲) n11组合是血量参考线 发布到Unity. 参考代码 if (hpValue < hpBar.value) // HP降低 { hpBar.DownBar.SetScale((flo

Cocos2d-x 自定义血条及其美化----之游戏开发《赵云要格斗》(4)

本章要讲解给怎么在界面上加一个血条,老规矩,还是在Cocos2d-x地图随精灵无限滚动与边缘检测----之游戏开发<赵云要格斗>   的基础上进行增加功能的. cocos2d-x版本:2.2.5 工程环境:windows7+VS2010 先来看看效果吧:由于还没有引入怪物,所以我弄成攻击一次,血条少1或10两种来看看效果 目录: 一.自定义血条类 二.使用自定义血条类并进行美化 三.改变英雄血量 一.自定义血条类 本着后头血条要给怪物来用,所以设计了一个血条类.原理其实就是两个ccsprite

Unity UGUI Canvas 使用Slider制作角色血条

最近课程实训选修Unity,讲解的是Unity官方案例--SpaceShoot,培训无聊,便想着给游戏角色制作一下血条,以此增加游戏的可玩性. Unity版本:5.4.1 案例模版:太空射击 原文作者:茄阁云云 原文连接:http://www.cnblogs.com/vmoor2016/p/6044941.html 把一个大象装进冰箱里需要三步:①把冰箱门打开:②把大象塞冰箱里:③关上冰箱门. 那么制作一个角色的血条需要几部呢?在这里也划分为三步:①制作血条:②摆放血条:③操作血条. 下面就来给

Unity3d人物的名称与血条的绘制方法

人物的名称与血条的绘制方法很简单,但是我们需要解决的问题是如何在3D世界中寻找合适的坐标.因为3D世界中的人物是会移动的,它是在3D世界中移动,并不是在2D平面中移动,但是我们需要将3D的人物坐标换算成2D平面中的坐标,继而找到人物头顶在屏幕中的2D坐标最后使用GUI将名称与血条绘制出来. 首先学习本文的重点内容,如何将游戏世界中任意3D坐标转换成屏幕中的2D坐标.根据这个方法计算出的2D坐标屏幕左下角的点为0.0 ,屏幕右上角的坐标为1.1 所以真实的2D坐标还得通过Screen.height

使用NGUI制作进度条(血条/蓝条)

制作血条和蓝条,原理都是一样的,下面创建一个可以复用的进度条. 第一步,搭建基本的UI显示界面,使用NGUI(没有插件的童鞋可以看我上一遍文章 )创建一个基本的进度条界面. 选中UIRoot,在Scene视图中,创建一个Sprite,重命名为NumberBar,为其选择图集和精灵,修改其大小到合适位置(256* 32).在其上右键,Attach一个Box Collider,然后再右键Attach一个Slider Script.我们会看到Slider组件会有些参数,我们会在稍后解释. 选中刚创建的

Unity3D游戏开发之实现血条技能培训

下面我们开始今天的Unity3D技能培训. 我们学习Unity3D培训目标:让U3D初学者可以更快速的掌握U3D技术,自行制作修改素材,可以独立完成2D.3D小规模游戏及网页游戏开发. 今天呢,我们来做一个在游戏中十分重要的组成元素:血条.血条是什么呢?血条是生命值的一种体现,就像<仙剑奇侠传三>电视剧中,当景天说他想让那些被邪剑仙害死的人活过来的时候,天帝说需要等量的生命值来换,所以电视剧中的结局就变成了景天留在世上的时间并不多了,雪见依偎着他坐在新安当门口的时候,天上忽然下起了雪.聊完了游