您的位置:首页 > 产品设计 > UI/UE

NGUI图片闪光

2016-01-27 13:55 295 查看
先上效果



Shader

Shader "Unlit/Transparent Colored Flow Texture"
{
Properties
{
_MainTex ("Base (RGB), Alpha (A)", 2D) = "black" {}
_FlashTex("Flash (RGB), Alpha (A)", 2D) = "white" {}
_FlashColor("Flash Color", Color) = (1,1,1,0)
_Interval("Interval", Float) = 5

}

SubShader
{
LOD 200

Tags
{
"Queue" = "Transparent"
"IgnoreProjector" = "True"
"RenderType" = "Transparent"
}

Pass
{
Cull Off
Lighting Off
ZWrite Off
Fog { Mode Off }
Offset -1, -1
Blend SrcAlpha OneMinusSrcAlpha

CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"

sampler2D _MainTex;
float4 _MainTex_ST;
sampler2D _FlashTex;
float4 _FlashColor;
float _Interval;

struct appdata_t
{
float4 vertex : POSITION;
float2 texcoord : TEXCOORD0;
fixed4 color : COLOR;
};

struct v2f
{
float4 vertex : SV_POSITION;
half2 texcoord : TEXCOORD0;
half2 texcoord1 : TEXCOORD1;
fixed4 color : COLOR;
};

v2f o;

float mymod(float x, float y)
{
return x - y * floor(x/y);
}

v2f vert (appdata_t v)
{
o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);
o.texcoord = v.texcoord;
o.texcoord1 = o.texcoord;
o.texcoord1.x += mymod(-_Time.w, _Interval) - 1.0f;
o.color = v.color;
return o;
}

fixed4 frag (v2f IN) : COLOR
{
float4 col = tex2D(_MainTex, IN.texcoord) * IN.color;

float4 flashCol = tex2D(_FlashTex,IN.texcoord1)*_FlashColor;
col.rgb = col.rgb + flashCol.rgb * flashCol.w;

return col;
}
ENDCG
}
}

SubShader
{
LOD 100

Tags
{
"Queue" = "Transparent"
"IgnoreProjector" = "True"
"RenderType" = "Transparent"
}

Pass
{
Cull Off
Lighting Off
ZWrite Off
Fog { Mode Off }
Offset -1, -1
ColorMask RGB
Blend SrcAlpha OneMinusSrcAlpha
ColorMaterial AmbientAndDiffuse

SetTexture [_MainTex]
{
Combine Texture * Primary
}
}
}
}


  

  

  

脚本

using UnityEngine;
using System.Collections;

/*-------------------------------------------------------------------
Copyright 2015 Minty Game LTD. All Rights Reserved.
Maintained by  bailu
-------------------------------------------------------------------
bailu				2016-01-26 14:45:52
带流光的UITexture
*/

[ExecuteInEditMode]
[RequireComponent(typeof(UITexture))]
public class UIFlowTexture : MonoBehaviour {

//流光颜色
[SerializeField]
private Texture FlowTexture = null;

//流光时间间隔
[SerializeField]
private float Interval = 5f;

//流光颜色
[SerializeField]
private Color FlowColor = Color.white;

//被流光的UITexture
private UITexture mUITexture;

void Awake()
{
mUITexture = gameObject.GetComponent<UITexture>();
}

// Use this for initialization
void Start ()
{
ResourceManager.PrepareResource<Material>(Resource.Dir.Material + "UITexture_Flow.mat", material =>
{
mUITexture.material = new Material(material);
RefreshMaterialProperty();
});
}

[ContextMenu("Refresh Material Property")]
public void RefreshMaterialProperty()
{
var mat = mUITexture.material;
if(null==mat)
{
return;
}

if(null!=FlowTexture)
{
mat.SetTexture("_FlashTex", FlowTexture);
}

mat.SetFloat("_Interval", Interval);

mUITexture.MarkAsChanged();
}

}


  

搞法:

1、创建个材质命名成UITexture_Flow.mat,把上面的shader拖拽进去。

2、创建GameObject,挂上UITexture(不用修改的材质,原因是我代码里会去修改他的材质。为什么总是new 新的材质,原因是每个UITexture都要自己流动自己的)

3、然后再挂上UITextureFlow,设置流光的参数


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: