//使用用途:同于屏幕掉血的后处理特效
//请结合和脚本:BloodScreen 挂载至摄像机使用本特效
//本特效设计之初未考虑兼容移动设备,请注意//使用说明:
//掉血获取此脚本,将showBlood设置为true,如果您需要更深的效果可将Alpha控制调节更高,控制上程序限制不小于0.5
//如果让血消失将showBlood设置为false即可using UnityEngine;
using System.Collections;[ExecuteInEditMode]
[AddComponentMenu("Learn/BloodScreen")]
public class CameraFilterPack : MonoBehaviour
{public Shader SCShader;[Range(0, 1)]public float Alpha =0.5f;public bool showBlood = false;[Range(0, 1f)]public float LightReflect = 1f;private Material SCMaterial;public Texture2D Texture2;Material material{get{if (SCMaterial == null){SCMaterial = new Material(SCShader);SCMaterial.hideFlags = HideFlags.HideAndDontSave;}return SCMaterial;}}// Start is called before the first frame updatevoid Start(){Texture2 = Resources.Load("aab") as Texture2D;SCShader = Shader.Find("BloodScreen");if (!SystemInfo.supportsImageEffects){enabled = false;return;}}void OnRenderImage(RenderTexture sourceTexture, RenderTexture destTexture){if (SCShader != null){if (!showBlood){Alpha = 0;}else{if (Alpha < 0.5f){Alpha = 0.5f;}}material.SetFloat("_Alpha", Alpha);material.SetTexture("_BloodTex", Texture2);Graphics.Blit(sourceTexture, destTexture, material);}else{Graphics.Blit(sourceTexture, destTexture);}}void Update(){#if UNITY_EDITORif (Application.isPlaying != true){SCShader = Shader.Find("BloodScreen");Texture2 = Resources.Load("aab") as Texture2D;}#endif}void OnDisable(){if (SCMaterial){DestroyImmediate(SCMaterial);}}
}
shader代码:
//使用用途:同于屏幕掉血的后处理特效
//请结合和脚本:CameraFilterPack 挂载至摄像机使用本特效
//本特效设计之初未考虑兼容移动设备,请注意Shader "BloodScreen"
{Properties{_MainTex ("Texture", 2D) = "white" {}_BloodTex ("Blood Texture", 2D) = "white" {}_Alpha("Alpha",Range(0.0,1.0))=1}SubShader{Pass{Cull Off ZWrite Off ZTest AlwaysCGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"struct appdata{float4 vertex : POSITION;float2 uv : TEXCOORD0;};struct v2f{float4 uv : TEXCOORD0;float4 vertex : SV_POSITION;};sampler2D _MainTex;float4 _MainTex_ST;sampler2D _BloodTex;float4 _BloodTex_ST;fixed _Alpha;v2f vert (appdata v){v2f o;o.vertex = UnityObjectToClipPos(v.vertex);o.uv.xy = TRANSFORM_TEX(v.uv, _MainTex);o.uv.zw = TRANSFORM_TEX(v.uv, _BloodTex);return o;}fixed4 frag (v2f i) : SV_Target{fixed4 base = tex2D(_MainTex, i.uv.xy);fixed4 blood=tex2D(_BloodTex,i.uv.zw);blood*=_Alpha;fixed4 col=base*blood+base*(1-_Alpha);return col;}ENDCG}}
}
贴图:(源自网络)ps自己画也行