Unity攻击敌人时产生泛白效果
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();
}
Unity攻击敌人时产生泛白效果的更多相关文章
- 使用Unity创造动态的2D水体效果
者:Alex Rose 在本篇教程中,我们将使用简单的物理机制模拟一个动态的2D水体.我们将使用一个线性渲染器.网格渲染器,触发器以及粒子的混合体来创造这一水体效果,最终得到可运用于你下款游戏的水纹和 ...
- 转载利用伪元素单个颜色实现 hover 和 active 时的明暗变化效果
1.颜色小tip知识 在背景色上方叠加一个黑色半透明层 rgba(0,0,0,.2) 可以得到一个更暗的颜色 在背景色上方叠加一个白色半透明层 rgba(255,255,255,.2) 可以得到一个更 ...
- js简单实现删除记录时的提示效果
删除记录时的提示效果,挺人性化的,实现的方法有很多,在本文为大家介绍下使用js是如何实现的 样式 复制代码代码如下: <style type="text/css"> ...
- 设置Activity显示和关闭时的动画效果
设置Activity显示和关闭时的动画效果 通过overridePendingTransition方法可以设置Activity显示和关闭的动画效果.首先需要在res/anim目录中建立相应的动画资源文 ...
- Unity的NGUI插件篇——入场效果
Unity的NGUI插件篇--入场效果 入场效果 入场效果须要借助于NGUI提供的TweenPosition类来完毕.为了说明此类的用法.本节将使会解说两个演示样例.本文选自 大学霸 <NGU ...
- ScrollReveal.js 用于创建和管理元素进入可视区域时的动画效果,帮助你的网站增加吸引力。
ScrollReveal.js 用于创建和管理元素进入可视区域时的动画效果,帮助你的网站增加吸引力. 1.http://www.yangqq.com/jstt/css3/2017-08-08/787. ...
- VUE - 路由跳转时设置动画效果
/* 为对应的路由跳转时设置动画效果 */ <transition name="fade"> <router-view /> & ...
- CSS实现页面切换时的滑动效果
最近在开发手机端APP页面功能时遇到一个需求:某个页面查询的数据有三种分类,需要展示在同一页面上,用户通过点击分类标签来查看不同类型的数据, 期望效果是 用户点击标签切换时另一个页面能够以一个平滑切入 ...
- (原创)[C#] 一步一步自定义拖拽(Drag&Drop)时的鼠标效果:(一)基本原理及基本实现
一.前言 拖拽(Drag&Drop),属于是极其常用的基础功能. 无论是在系统上.应用上.还是在网页上,拖拽随处可见.同时拖拽时的鼠标效果也很漂亮,像这样: 这样: 还有这样: 等等等等. 这 ...
随机推荐
- jmeter教程--简单的做压力测试
Jmeter是一个非常好用的压力测试工具. Jmeter用来做轻量级的压力测试,非常合适,只需要十几分钟,就能把压力测试需要的脚本写好. 什么是压力测试 顾名思义:压力测试,就是 被测试的系统,在 ...
- django —— 邮件
官方文档 1.11 配置settings.py # QQ邮箱为例, 其他邮箱对应的SMTP配置可查官方 EMAIL_HOST = "smtp.qq.com" EMAIL_PORT ...
- pycharm 中脚本执行的3种模式
https://blog.csdn.net/chenmozhe22/article/details/81700504
- MySQL基础之 排序与限制,聚合
排序与限制 ORDER BY 作用:取出按照某个字段进行排序后的记录结果集. 配合:常与DESC 和ASC一块使用:默认是ASC,表示升序.DESC表示降序 LIMIT 作用:用于显示数据的一部分记 ...
- October 14th 2017 Week 41st Saturday
I was well beaten myself, and I am beffer for it. 我自己也被打败过,但我因此变得更好. For most of us, the life road c ...
- [ML学习笔记] XGBoost算法
[ML学习笔记] XGBoost算法 回归树 决策树可用于分类和回归,分类的结果是离散值(类别),回归的结果是连续值(数值),但本质都是特征(feature)到结果/标签(label)之间的映射. 这 ...
- [Android自动化] 在 pip-9.0.1 版本情况下安装 uiautomator2 报错的解决办法
1.在命令窗口中使用命令: pip install uiautomator2 时报 pip 版本过低,需要先升级 pip 版本,理论上会按照提示进行升级 pip 操作,但执行升级命令时到最后却还是报错 ...
- 【Ansible 文档】【译文】Windows 支持
see also:List of Windows Modules Windows Support Windows 支持 Windows: How Does It Work Windows:如何工作 正 ...
- MySql详解(六)
MySql详解(六) MySql事务 一.含义 事务:一条或多条sql语句组成一个执行单位,一组sql语句要么都执行要么都不执行 二.特点(ACID) A 原子性:一个事务是不可再分割的整体,要么都执 ...
- 1.HBase In Action 第一章-HBase简介(后续翻译中)
This chapter covers ■ The origins of Hadoop, HBase, and NoSQL ■ Common use cases for HBase ■ A basic ...