NGUI图片闪光
2016-01-27 13:55
295 查看
先上效果
Shader
脚本
搞法:
1、创建个材质命名成UITexture_Flow.mat,把上面的shader拖拽进去。
2、创建GameObject,挂上UITexture(不用修改的材质,原因是我代码里会去修改他的材质。为什么总是new 新的材质,原因是每个UITexture都要自己流动自己的)
3、然后再挂上UITextureFlow,设置流光的参数
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,设置流光的参数
相关文章推荐
- Xcode 7测试化工具XCTestCase
- (转)String和StringBuilder、StringBuffer的区别?
- iOS 蓝牙使用小结 bluetooth
- iOS开发-UI控件:自定义UITableViewCell 上的多个按钮点击事件处理
- MCU51单片机uIP协议栈+ENC28J60网卡 移植、应用
- iOS开发中UIDatePicker控件的使用方法简介
- Atitit.Gui控件and面板----web server区----- web服务器监控面板and控制台条目
- Android stuido viewpagerindicator的使用
- hdu 1242 Rescue
- 课堂笔记
- EasyUI使用JSON保存数据
- iOS开发-UI控件:代码取消UITableViewCell选中状态
- GCD之dispatch queue
- easyui webuploader 文件上传演示
- iOS开发-进阶:子线程更新UI的两种方法
- 修改UITextField的placeholder颜色
- iOS学习心得——UINavigationController
- easyui根据id获取列索引
- iOS之UITableViewCell左右滑动效果
- iOS开发-UI控件:UIImagePickerController 视频录制操作,视频大小,时间长度