unity屏幕受伤特效

cs 复制代码
//使用用途:同于屏幕掉血的后处理特效
//请结合和脚本: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 update
    void 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_EDITOR
        if (Application.isPlaying != true)
        {
            SCShader = Shader.Find("BloodScreen");
            Texture2 = Resources.Load("aab") as Texture2D;
        }
        #endif
    }

    void OnDisable()
    {
        if (SCMaterial)
        {
            DestroyImmediate(SCMaterial);
        }

    }
}

shader代码:

bash 复制代码
//使用用途:同于屏幕掉血的后处理特效
//请结合和脚本: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 Always
			CGPROGRAM
			#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自己画也行

相关推荐
神码编程4 小时前
【Unity功能集】TextureShop纹理工坊(五)选区
unity·游戏引擎·shader·ps选区
m0_748251729 小时前
Android webview 打开本地H5项目(Cocos游戏以及Unity游戏)
android·游戏·unity
benben0449 小时前
Unity3D仿星露谷物语开发7之事件创建动画
unity·游戏引擎
gantengsheng10 小时前
基于51单片机和OLED12864的小游戏《贪吃蛇》
单片机·嵌入式硬件·游戏·51单片机
264玫瑰资源库10 小时前
从零开始C++棋牌游戏开发之第三篇:游戏的界面布局设计
开发语言·c++·python·游戏·pygame·源代码管理
264玫瑰资源库10 小时前
从零开始C++游戏开发之第七篇:游戏状态机与回合管理
开发语言·c++·游戏
林枫依依12 小时前
Unity2021.3.16f1可以正常打开,但是Unity2017.3.0f3却常常打开闪退或者Unity2017编辑器运行起来就闪退掉
unity
虾球xz12 小时前
游戏引擎学习第57天
学习·游戏引擎
windwind200015 小时前
游戏关卡设计方法的杂感
游戏·关卡设计
异次元的归来1 天前
Unity DOTS中的share component
unity·游戏引擎