Shader的代码如下,主要是将透明度为1的像素点输出为白色,其中_BeAttack表示角色被攻击的泛白状态

// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'

Shader "Custom/BeAttackTest" {
Properties{
_MainTex("texture", 2D) = "black"{}
_Color("add color", Color) = (1,1,1,1)
//_BeAttack("BeAttack",Int)=0
}

SubShader{
Tags{ "QUEUE" = "Transparent" "IGNOREPROJECTOR" = "true" "RenderType" = "Transparent" }
ZWrite Off
Blend SrcAlpha OneMinusSrcAlpha
LOD 100
Cull Off//设置双面渲染,避免角色缩放翻转时无渲染情况

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

sampler2D _MainTex;
fixed4 _MainTex_ST;
fixed4 _Color;
int _BeAttack;//对外参数表示是否被攻击了

struct vIn {
half4 vertex:POSITION;
float2 texcoord:TEXCOORD0;
fixed4 color : COLOR;
};

struct vOut {
half4 pos:SV_POSITION;
float2 uv:TEXCOORD0;
fixed4 color : COLOR;
};

vOut vert(vIn v) {
vOut o;
o.pos = UnityObjectToClipPos(v.vertex);
o.uv = TRANSFORM_TEX(v.texcoord, _MainTex);
o.color = v.color;
return o;
}

fixed4 frag(vOut i) :COLOR{
fixed4 tex = tex2D(_MainTex, i.uv).rgba;
/*
if (tex.a == 1)return fixed4(1, 1, 1, 1);
else return fixed4(0, 0, 0, 0);
*/
if (_BeAttack==1) {//是否被攻击
if (tex.a == 1)return fixed4(1, 1, 1, 1);//对透明度为1的像素输出为白色
else return fixed4(0, 0, 0, 0);
}
else {
return tex;
}

}
ENDCG
}
}
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

角色被攻击的代码如下,通过设置时间参数控制泛白的持续时间:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Enemy01Die : MonoBehaviour,IDie {

SpriteRenderer spriteRenderer;

public float whiteCoolTime;//泛白效果的持续时间长度
float whiteCoolTimer;

private void Awake()
{
spriteRenderer = GetComponent<SpriteRenderer>();
}

void Update()
{
//被攻击状态冷却,设置被攻击参数为0
if (whiteCoolTimer <= 0)
spriteRenderer.material.SetInt("_BeAttack", 0);
else
whiteCoolTimer -= Time.deltaTime;
}

public void Die()
{
Destroy(gameObject);
}

public void BeAttack()
{

//被攻击的时候设置shader的被攻击参数为1
spriteRenderer.material.SetInt("_BeAttack", 1);
whiteCoolTimer = whiteCoolTime;
}
}

public interface IDie
{
void Die();
void BeAttack();
}

最新文章

  1. PB-日志-系统函数2.13.7Match()、MatchW()
  2. Hibernate的第一次测试解析
  3. Java攻城狮面试考题
  4. Linux下FTP服务(一)—— Ubuntu安装
  5. select、poll、epoll之间的区别
  6. 解决mysql&quot;Access denied for user&#39;root&#39;@&#39;IP地址&#39;&quot;问题
  7. CM 部署bigdata测试环境群集机器报错
  8. C#操作Excel文件(读取Excel,写入Excel)
  9. HTML编辑器UEditor的简单使用
  10. java 处理时间的各种方式——获取时间——时间格式化
  11. 简述负载均衡&amp;CDN技术(转)
  12. Journey
  13. Git:一、简介&amp;安装Git 2.20.1
  14. mysql8.0 1251错误
  15. 手把手教你提交文件到git
  16. DB2编目配置及管理
  17. wildFly(Jboss as)入门
  18. 记一次线上gc调优的过程
  19. Python的开源人脸识别库:离线识别率高达99.38%
  20. angular -- $route API翻译

热门文章

  1. AD用户移除所属组
  2. [Spark Streaming_1] Spark Streaming 概述
  3. mybatis 反向生成步骤
  4. October 12th 2017 Week 41st Thursday
  5. 13.2SolrCloud集群使用手册之CoreAdmin API
  6. Rx编程的第一步是将native对象转换为monad对象
  7. C语言编程积累2
  8. Eclipse Mars 2安装Drools6.4插件(Drools and jBPM tools)时无法安装JBoss Runtime Drools Detector
  9. AES块加密与解密
  10. docker-machine create -d generic 运行的波折过程及遇见的问题