您的位置:首页 > 移动开发 > Unity3D

Unity实现攻击后闪白效果

2019-09-20 17:11 337 查看
原文链接:https://www.geek-share.com/detail/2628525202.html

这里只需要一个Shader和一个脚本。

1、创建一个ShaderTest的脚本,代码如下,挂载在相机上。

[code]
using UnityEngine;
using System.Collections;
//[ExecuteInEditMode]
public class ShaderTest : MonoBehaviour
{
#region Variables
public Shader curShader;
private float speed = 0.5f;
public float grayScaleAmount = 1.0f;
private Material curMaterial;
#endregion

#region Properties
public Material material
{
get
{
if (curMaterial == null)
{
curMaterial = new Material(curShader);
curMaterial.hideFlags = HideFlags.HideAndDontSave;
}
return curMaterial;
}
}
#endregion

// Use this for initialization
void Start()
{
if (SystemInfo.supportsImageEffects == false)
{
enabled = false;
return;
}

if (curShader != null && curShader.isSupported == false)
{
enabled = false;
}
}

void OnRenderImage(RenderTexture sourceTexture, RenderTexture destTexture)
{
if (curShader != null)
{
material.SetFloat("_LuminosityAmount", grayScaleAmount);

Graphics.Blit(sourceTexture, destTexture, material);
}
else
{
Graphics.Blit(sourceTexture, destTexture);
}
}

// Update is called once per frame
void Update()
{
//grayScaleAmount = Mathf.Clamp(grayScaleAmount, 0.0f, 1.0f);
if (grayScaleAmount <1)
{
grayScaleAmount += Time.deltaTime*speed;
}
}

void OnDisable()
{
if (curMaterial != null)
{
DestroyImmediate(curMaterial);
}
}
}

 2、创建一个Shader,命名为imageTest。

Shader代码如下。

[code]Shader "Custom/imageTest" {
Properties {
_MainTex ("Base (RGB)", 2D) = "white" {}
_LuminosityAmount ("GrayScale Amount", Range(0.0, 1.0)) = 1.0
}
SubShader {
Pass {
CGPROGRAM
#pragma vertex vert_img
#pragma fragment frag

#include "UnityCG.cginc"

uniform sampler2D _MainTex;
fixed _LuminosityAmount;

fixed4 frag(v2f_img i) : COLOR
{
//Get the colors from the RenderTexture and the uv's
//from the v2f_img struct
fixed4 renderTex = tex2D(_MainTex, i.uv);

//Apply the Luminosity values to our render texture
float luminosity = 0.299 * renderTex.r + 0.587 * renderTex.g + 0.114 * renderTex.b;
fixed4 finalColor = lerp(renderTex, luminosity, _LuminosityAmount);

return finalColor;
}

ENDCG
}
}
FallBack "Diffuse"
}

 

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