当前位置: 首页 > 编程笔记 >

Unity Shader实现2D游戏迷雾

尉迟墨竹
2023-03-14
本文向大家介绍Unity Shader实现2D游戏迷雾,包括了Unity Shader实现2D游戏迷雾的使用技巧和注意事项,需要的朋友参考一下

本文实例为大家分享了Unity Shader实现2D游戏迷雾的具体代码,供大家参考,具体内容如下

先看效果吧。

我使用的是屏幕后处理效果,首先先去Photoshop做一张图片如下,用画笔点一个点就可以了,使用它来对摄像机截取的图片进行处理。

在摄像机上添加脚本文件

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class TestScript : MonoBehaviour
{
 [Range(0,3)]
 public float Lerp = 0;//使用它来调整可视区域的大小
 public Texture2D MaskTex;
 public Shader ScreanShader;
 public Material GetMaterial
 {
  get
  {
   if(_material ==null) _material = new Material(ScreanShader);
   return _material;
  }
 }
 private Material _material = null;
 //src是摄像机截取到的照片,dest是处理过的图片
 void OnRenderImage(RenderTexture src, RenderTexture dest)
 {
  GetMaterial.SetTexture("_MainTex", src);
  GetMaterial.SetTexture("_MaskTex", MaskTex);
  GetMaterial.SetFloat("_Lerp", Lerp);
  Graphics.Blit(src, dest, GetMaterial);
 }
}

对应的shader,思路就是把MaskTex的颜色翻转一下然后直接乘上去就可以了,小数越乘越小,越小颜色越黑。

Shader "Wzhhh/MyShader2" {
 Properties{
 _MainTex("MainTex",2D) = "white"{}
 _MaskTex("MaskTex",2D) = "white"{}
 _Lerp("Lerp",Range(0,3)) = 1
 }
 SubShader{
 Pass{
 Tags{ "LightMode" = "ForwardBase" }
 
 CGPROGRAM
 #include "Lighting.cginc"
 #pragma vertex vert
 #pragma fragment frag
 sampler2D _MaskTex;
 sampler2D _MainTex;
 float4 _MainTex_ST;
 float _AlphaBase;
 float _Lerp;
 struct a2v {
 float4 vertex : POSITION;
 float2 texcoord : TEXCOORD0;
 };
 struct v2f {
 float4 pos : SV_POSITION;
 fixed2 uv : TEXCOORD0;
 };
 v2f vert(a2v i) {
 v2f o;
 o.pos = UnityObjectToClipPos(i.vertex);
 o.uv = TRANSFORM_TEX(i.texcoord, _MainTex);
 return o;
 }
 fixed4 frag(v2f o) :SV_TARGET{
 fixed4 color = tex2D(_MaskTex, o.uv);
 color.r = 1 - color.r;
 color.g = 1 - color.g;
 color.b = 1 - color.b;
 fixed4 color2 = tex2D(_MainTex, o.uv);
 color2.r *= color.r*_Lerp;
 color2.g *= color.g*_Lerp;
 color2.b *= color.b*_Lerp;
 return color2;
 }
 ENDCG
 }
 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。

 类似资料:
  • 本文向大家介绍C++实现走迷宫小游戏,包括了C++实现走迷宫小游戏的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了C++实现走迷宫小游戏的具体代码,供大家参考,具体内容如下 源码下载:C++实现走迷宫小游戏 主程序代码: 更多C++精彩小游戏请点击专题:经典游戏 进行学习 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 本文向大家介绍C++ 迷宫游戏实现代码,包括了C++ 迷宫游戏实现代码的使用技巧和注意事项,需要的朋友参考一下 C++ 迷宫游戏实现代码 题目 通过让游戏角色自动寻找迷宫出口,走出迷宫,来练习C++面向对象之封装的基础知识。迷宫图如下所示,其中X表示墙。   1、程序分析 走出去的原理:遵循右手规则或左手规则。右手扶墙走,就会走出迷宫,反之,亦然。   step1 创建迷宫类,打印出迷宫地图。  

  • 我正在尝试制作我的第一个Pacman游戏,但我遇到了一堵我自己似乎无法打破的墙:( 这是关于如何在我的游戏中检测碰撞,所以步行者不能穿过障碍物/墙壁。我已经使它不能去屏幕外与此代码: ,但如果我在屏幕中间的电路板上有一个矩形,我不知道如何编程,这样它就会在墙前停止。 我需要阻止我的pacman移动到竞技场内的墙上,如你所见(左上方的矩形) 我的Board类代码: 希望有人能告诉我该怎么做...似乎

  • 包含在程序启动时启动的线程。这个线程包含一个循环,每40毫秒更新一次游戏并重新绘制()board。 备选办法B: 板创建一个摆动计时器。这个计时器的动作监听器是板本身。actionPerformed()方法每40毫秒运行一次,并更新game+repaints Board()。 谢谢

  • 问题内容: 我正在做一个简单的游戏,例如马里奥游戏,角色固定在一个位置,地面向左移动,给人一种角色移动的幻觉。地面由由左上角和右下角坐标定义的矩形块组成: 跳跃只是在向左移动表面的同时更改角色的y坐标,因此跳跃看起来像倒转的字母。 其余代码- 动画,移动精灵-与http://zetcode.com/tutorials/javagamestutorial/movingsprites/非常相似 我希望

  • 本文向大家介绍Java小项目之迷宫游戏的实现方法,包括了Java小项目之迷宫游戏的实现方法的使用技巧和注意事项,需要的朋友参考一下 项目要求: 一个网格迷宫由n行n列的单元格组成,每个大院个要么是空地(用0表示),要么是障碍物(用1表示),你的任务是找一条从起点到终点的移动序列,其中只能上下左右移动到相邻单元格。任何时候都不能在有障碍物的单元格中,也不能走到迷宫之外,起点为左上角和终点右下角。 项