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自己画也行

相关推荐
yuanmenghao2 小时前
从零开始:使用 Claude Code 打造字母消除游戏
游戏·glm·claudecode
阿甘编程点滴9 小时前
2026年推荐以下5款游戏直播提词器
游戏
PieroPc10 小时前
HTML5 Canvas 平台跳跃游戏
前端·游戏·html5
小贺儿开发10 小时前
Unity3D 自动化物流分拣模拟
运维·科技·unity·自动化·人机交互·传送带·物流分拣
EQ-雪梨蛋花汤10 小时前
【3D可视化】基于 Unity 的智慧体育馆三维信息可视化大屏实践
3d·unity·信息可视化
weixin_4242946710 小时前
Unity 使用Steamworks.NET
unity·游戏引擎
ellis197011 小时前
Unity资源管理框架Addressables总结
unity·游戏引擎
yj爆裂鼓手11 小时前
unity编辑器下ab包模式下textMeshPro文本不显示材质是紫色的异常,真机无异常的问题
unity·编辑器·材质
Swift社区11 小时前
LeetCode 390 消除游戏 - Swift 题解
leetcode·游戏·swift
技术策划Boring12 小时前
2025年工作复盘:开放世界3A项目配置管线与性能监控的探索
游戏·ue5·虚幻·p4·perforce