当前位置: 首页 > news >正文

Unity3D雨雪粒子特效(Particle System)

系列文章目录

unity工具


文章目录

  • 系列文章目录
  • 👉前言
  • 👉一、下雨的特效
    • 1-1.首先就是创建一个自带的粒子系统,整几张贴图,设置一下就能实现想要的效果了
    • 1-2 接着往下看视频效果
  • 👉二、下雪的特效
  • 👉三、下雪有积雪的效果
    • 3-1 先把控制积雪的cs脚本代码如下
    • 3-2 shader代码如下
    • 3-3 积雪视频效果如下
  • 👉壁纸分享
  • 👉总结


👉前言

大家好,我是心疼你的一切,不定时更新Unity开发技巧,觉得有用记得一键三连哦。
有时候会用到特效,下雨,下雪…用的时候还需要设置一番非常不方便,所以整一个方便使用的,记录一下博客


提示:以下是本篇文章正文内容,下面案例可供参考

👉一、下雨的特效

1-1.首先就是创建一个自带的粒子系统,整几张贴图,设置一下就能实现想要的效果了

其中关键的内容就是下落速度,大小变化,颜色变化,渲染器的选择
下面是粒子系统的设置截图
在这里插入图片描述
没有贴图不要着急哦,最后会附上资源包的

1-2 接着往下看视频效果

下雨特效视频

如果不是你想要的也没关系,到时候自己调一下即可

👉二、下雪的特效

下雪和下雨差不多,下落的速度慢一点,换个贴图
下面是特效的截图
在这里插入图片描述
下面是视频效果

下雪特效视频

👉三、下雪有积雪的效果

首先先创建一个plane,给plane贴上一个贴图
然后创建一个shader命名随意
还有一个控制积雪的cs脚本

3-1 先把控制积雪的cs脚本代码如下

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class XueController : MonoBehaviour
{private const string SnowOn = "SNOW_ON"; // 积雪关键字private const string SnowLevel = "_Snow"; // 积雪级别参数private bool isShow = true; // 是否显示积雪public float timer; // 计时器// Start is called before the first frame updatevoid Start(){Shader.EnableKeyword(SnowOn); // 启用积雪关键字}// Update is called once per framevoid Update(){if (Input.GetKey(KeyCode.A)) // 如果按下 A 键{if (isShow) // 如果正在显示积雪{timer += Time.deltaTime*0.5f; // 计时器增加if (timer > 5) // 如果计时器超过 5 秒{isShow = false; // 停止显示积雪// 重置计时器}// 设置全局积雪级别参数Shader.SetGlobalFloat(SnowLevel, timer/25);}}else if (Input.GetKey(KeyCode.D)) // 如果按下 D 键 重置积雪{timer = 0;isShow = true; // 开启boolShader.SetGlobalFloat(SnowLevel, 0f); // 设置全局积雪级别参数为 0}}
}

3-2 shader代码如下

Shader "Custom/JiXueShader"
{Properties{_MainTex ("Texture", 2D) = "white" {} // 主纹理_Diffuse("Color",Color) = (1,1,1,1) // 漫反射颜色_BumpMap("Normal Map",2D ) = "white"{} // 法线贴图_BumpScale("Bump Scale", float) = 1 // 法线贴图缩放_Outline("Outline", Range(0,0.2)) = 0.1 // 轮廓宽度_OutlineColor("OutlineColor", Color) = (0,0,0,0) // 轮廓颜色_Step("Step", Range(1,30)) = 1 // 计算漫反射阶梯_ToonEffect("ToonEffect", Range(0,1)) = 0.5 // 卡通效果//_Snow("Snow Level", Range(0,1)) = 0.5 // 积雪级别_SnowColor("SnowColor", Color) = (1,1,1,1) // 积雪颜色_SnowDir("SnowDir", Vector) = (0,1,0) // 积雪方向}SubShader{Tags{"RenderType"="Opaque"}LOD 100Pass{CGPROGRAM#pragma vertex vert#pragma fragment frag#pragma multi_compile __ SNOW_ON#include "UnityCG.cginc"#include "Lighting.cginc"struct v2f{float4 vertex : SV_POSITION; // 顶点位置float4 uv :TEXCOORD0; // 纹理坐标float4 TtoW0 : TEXCOORD1; // 切线空间转世界空间矩阵float4 TtoW1 :TEXCOORD2; // 切线空间转世界空间矩阵float4 TtoW2 :TEXCOORD3; // 切线空间转世界空间矩阵};sampler2D _MainTex;float4 _MainTex_ST;fixed4 _Diffuse;float _Step;float _ToonEffect;sampler2D _BumpMap;float4 _BumpMap_ST;float _BumpScale;//积雪float _Snow;float4 _SnowColor;float4 _SnowDir;v2f vert(appdata_tan v){v2f o;o.vertex = UnityObjectToClipPos(v.vertex); // 顶点转剪裁空间o.uv.xy = TRANSFORM_TEX(v.texcoord, _MainTex); // 主纹理坐标o.uv.zw = TRANSFORM_TEX(v.texcoord, _BumpMap); // 法线贴图坐标fixed3 worldPos = mul(unity_ObjectToWorld, v.vertex); // 世界空间位置fixed3 worldNormal = UnityObjectToWorldNormal(v.normal); // 世界空间法线fixed3 worldTangent = UnityObjectToWorldDir(v.tangent.xyz); // 世界空间切线fixed3 worldBinormal = cross(worldNormal, worldTangent) * v.tangent.w; // 世界空间双切线o.TtoW0 = float4(worldTangent.x, worldBinormal.x, worldNormal.x, worldPos.x); // 切线空间转世界空间矩阵o.TtoW1 = float4(worldTangent.y, worldBinormal.y, worldNormal.y, worldPos.y); // 切线空间转世界空间矩阵o.TtoW2 = float4(worldTangent.z, worldBinormal.z, worldNormal.z, worldPos.z); // 切线空间转世界空间矩阵return o;}fixed4 frag(v2f i) : SV_Target{fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT; // 环境光fixed4 albedo = tex2D(_MainTex, i.uv); // 主纹理采样float3 worldPos = float3(i.TtoW0.w, i.TtoW1.w, i.TtoW2.w); // 世界空间位置fixed3 lightDir = UnityWorldSpaceLightDir(worldPos); // 光照方向fixed3 viewDir = normalize(UnityWorldSpaceViewDir(worldPos)); // 视线方向//求法线fixed4 packedNormal = tex2D(_BumpMap, i.uv.zw); // 法线贴图采样fixed3 tangentNormal = UnpackNormal(packedNormal); // 切线空间法线解码tangentNormal.xy *= _BumpScale; // 法线贴图缩放fixed3 worldNormal = normalize(float3(dot(i.TtoW0.xyz, tangentNormal), dot(i.TtoW1.xyz, tangentNormal),dot(i.TtoW2.xyz, tangentNormal))); // 世界空间法线float difLight = dot(lightDir, worldNormal) * 0.5 + 0.5; // 漫反射光照difLight = smoothstep(0, 1, difLight); // 漫反射光照平滑处理float toon = floor(difLight * _Step) / _Step; // 计算漫反射阶梯difLight = lerp(difLight, toon, _ToonEffect); // 考虑卡通效果fixed3 diffuse = _LightColor0.rgb * albedo * _Diffuse.rgb * difLight; // 漫反射颜色fixed4 color = fixed4(ambient + diffuse, 1); // 最终颜色#if SNOW_ONif (dot(worldNormal, _SnowDir.xyz) > lerp(1, -1, _Snow)) // 判断是否处于积雪区域{color.rgb = _SnowColor.rgb; // 使用积雪颜色}else{color.rgb = color.rgb; // 使用漫反射颜色}#endifreturn color; // 返回最终颜色}ENDCG}}FallBack "Diffuse" // 使用Diffuse作为后备
}

3-3 积雪视频效果如下

下雪特效积雪视频

资源包下载链接

👉壁纸分享

请添加图片描述
请添加图片描述

👉总结

没有积分的可以私聊评论,发我邮箱即可
以上就是下雨下雪的特效
如能帮助到你,就帮忙点个赞吧,三连更好哦,谢谢
积雪shader参考这位博主的shader:https://blog.csdn.net/qq_34697930/article/details/136838789?spm=1001.2014.3001.5502
不定时更新Unity开发技巧,觉得有用记得一键三连哦。么么哒

相关文章:

Unity3D雨雪粒子特效(Particle System)

系列文章目录 unity工具 文章目录 系列文章目录👉前言👉一、下雨的特效1-1.首先就是创建一个自带的粒子系统,整几张贴图,设置一下就能实现想要的效果了1-2 接着往下看视频效果 👉二、下雪的特效👉三、下雪有积雪的效果3-1 先把控…...

记录使用自定义编辑器做试题识别功能

习惯了将解析写在代码注释,这里就直接上代码啦,里面用到的bxm-ui3组件库是博主基于element-Plus做的,可以通过npm i bxm-ui3自行安装使用 // 识别方法: // dom 当前识别数据所在区域, questionType 当前点击编辑选择的题目类型&a…...

MySQL索引和视图

MySQL索引和视图是关系型数据库MySQL中的两个重要概念。索引用于优化数据库的查询性能,而视图用于提供一个逻辑上的表结构,方便用户查询和操作数据。 索引是一种数据结构,可以加速对数据库表中的数据进行查询的速度。通过创建索引&#xff0…...

Java单元测试Mock的用法,关于接口测试的用例

Testvoid getAllTradeDateList() {// 创建模拟对象Bc6CalculateService calculateService Mockito.mock(Bc6CalculateService.class);String allTradeDateListStr ExcelUtil.excelToJsonStr("bc6/NibTradeDate.xlsx");// 设置模拟行为List<NibTradeDateCloudDto…...

《心理学报》文本分析技术最新进展总结盘点

这些研究展示了文本分析在多个心理学领域内的强大应用&#xff0c;包括情境判断测验的自动化评分、自闭症儿童教育干预的学习效果评估、中文文本阅读的词切分和词汇识别机制、网络突发事件的负性偏向分析&#xff0c;以及小学生羞怯特质的预测与语言风格模型构建。通过采用机器…...

json格式文件备份redis数据库 工具

背景&#xff1a; 项目组要求使用 json备份redis缓存数据库内容。 附件里工具是一个包含redis-dump工具的镜像文件&#xff0c;方便用户在局域网中使用容器备份redis缓存数据库。 使用步骤&#xff1a; 解压tar文件&#xff0c;导入镜像 docker load < redis_dump_of_my…...

JAVA系列:NIO

NIO学习 一、前言 先来看一下NIO的工作流程图&#xff1a; NIO三大核心组件&#xff0c;channel&#xff08;通道&#xff09;、Buffer&#xff08;缓冲区&#xff09;、selector&#xff08;选择器&#xff09;。NIO利用的是多路复用模型&#xff0c;一个线程处理多个IO的读…...

偏微分方程算法之抛物型方程差分格式编程示例二

目录 一、研究问题 二、C++代码 三、结果分析 一、研究问题 采用向后欧拉格式计算抛物型方程初边值问题:...

linux 查看 线程名, 线程数

ps -T -p 3652 ps H -T <PID> ps -eLf | grep process_name top -H -p <pid> 查看进程创建的所有线程_ps 显示一个进程的所有线程名字-CSDN博客...

python class __getattr__ 与 __getattribute__ 的区别

在Python中&#xff0c;__getattr__是一个特殊的方法&#xff0c;用于处理访问不存在的属性时的行为。它通常在类中被重写&#xff0c;以便在属性访问失败时提供自定义的处理逻辑。 __getattr__ 的使用 1. 基本用法 __getattr__方法在访问类实例的某个不存在的属性时自动调用…...

[ C++ ] 类和对象( 下 )

初始化列表 初始化列表&#xff1a;以一个冒号开始&#xff0c;接着是一个以逗号分隔的数据成员列表&#xff0c;每个"成员变量"后面跟 一个放在括号中的初始值或表达式。 class Date { public: Date(int year, int month, int day): _year(year), _month(month), _d…...

这么多不同接口的固态硬盘,你选对了嘛!

固态硬盘大家都不陌生,玩游戏、办公存储都会用到。如果自己想要给电脑或笔记本升级下存储,想要存储更多的文件,该怎么选购不同类型的SSD固态盘呐,下面就来认识下日常使用中常见的固态硬盘。 固态硬盘(Solid State Drive, SSD)作为数据存储技术的革新力量,其接口类型的选…...

使用IDEA远程debug调试

文章目录 应用背景开启方式IDEA设置启动脚本改造 参考资料 应用背景 springboot项目&#xff0c;部署到服务器上&#xff0c;需要开启远程debug跟踪代码。 使用idea开启远程debug。 开启方式 IDEA设置 选择 Edit Configuration 如图&#xff0c;点击加号&#xff0c;选择Re…...

开源自定义表单系统源码 一键生成表单工具 可自由DIY表单模型+二开

分享一款开源自定义表单系统源码&#xff0c;能够实现99%各行业的报名、预约、加盟申请、调查等应用&#xff0c;而且同时多开创建多个表单&#xff0c;支持自定义各种字段模型&#xff0c;市面上需要的表单模型都含了&#xff0c;随便自定义啦&#xff0c;含完整的代码包和详细…...

【java10】集合中新增copyof创建只读集合

在Java中&#xff0c;集合&#xff08;如List、Set、Map等&#xff09;是编程中常用的数据结构。然而&#xff0c;在某些场景下&#xff0c;我们可能希望集合中的数据是只读的&#xff0c;即不允许修改集合中的元素。在Java8及之前&#xff0c;要实现这样的功能&#xff0c;我们…...

python小甲鱼作业001-3讲

0.Python是什么类型的语言 编译型语言不同&#xff0c;Python 代码在执行时由解释器直接逐行解释执行&#xff0c;无需先编译成机器语言。这使得开发过程更快&#xff0c;因为你可以即时运行并测试你的代码。 Python 在运行时自动推断变量的类型&#xff0c;无需在代码中显式声…...

做电商,错过了2020年的抖音!那2024一定要选择视频号小店!

哈喽~我是电商月月 电商老板们集合了&#xff0c;问大家一个问题: 如果能让你回到三四年前&#xff0c;抖音才步入大众视野&#xff0c;这时候让你去做抖音小店&#xff0c;你愿意吗&#xff1f; 我敢相信&#xff01;很多&#xff0c;错过当年抖音红利的商家&#xff0c;一…...

赛氪网与武汉外语外事职业学院签署校企合作,共创职业教育新篇章

5月23日下午14:00&#xff0c;武汉外语外事职业学院在藏龙岛校区食堂三楼报告厅隆重举行了2024年职业教育活动周优秀校外实习基地表彰仪式。本次活动旨在表彰在职业教育领域作出突出贡献的校外实习基地&#xff0c;同时加强校企合作&#xff0c;共同推动职业教育的发展。作为重…...

如何在文档中有效添加网格:技巧与实例

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、引言&#xff1a;为何添加网格至关重要 二、网格添加的基本步骤 1. 确定网格类型和样式…...

设计模式10——装饰模式

写文章的初心主要是用来帮助自己快速的回忆这个模式该怎么用&#xff0c;主要是下面的UML图可以起到大作用&#xff0c;在你学习过一遍以后可能会遗忘&#xff0c;忘记了不要紧&#xff0c;只要看一眼UML图就能想起来了。同时也请大家多多指教。 装饰模式 是一种结构型模式。…...

Python|GIF 解析与构建(5):手搓截屏和帧率控制

目录 Python&#xff5c;GIF 解析与构建&#xff08;5&#xff09;&#xff1a;手搓截屏和帧率控制 一、引言 二、技术实现&#xff1a;手搓截屏模块 2.1 核心原理 2.2 代码解析&#xff1a;ScreenshotData类 2.2.1 截图函数&#xff1a;capture_screen 三、技术实现&…...

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子&#xff0c;用于处理异步操作&#xff08;如数据加载&#xff09;中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误&#xff1a;捕获在 loader 或 action 中发生的异步错误替…...

OpenLayers 可视化之热力图

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 热力图&#xff08;Heatmap&#xff09;又叫热点图&#xff0c;是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)

本期内容并不是很难&#xff0c;相信大家会学的很愉快&#xff0c;当然对于有后端基础的朋友来说&#xff0c;本期内容更加容易了解&#xff0c;当然没有基础的也别担心&#xff0c;本期内容会详细解释有关内容 本期用到的软件&#xff1a;yakit&#xff08;因为经过之前好多期…...

AGain DB和倍数增益的关系

我在设置一款索尼CMOS芯片时&#xff0c;Again增益0db变化为6DB&#xff0c;画面的变化只有2倍DN的增益&#xff0c;比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析&#xff1a; 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...

Qt 事件处理中 return 的深入解析

Qt 事件处理中 return 的深入解析 在 Qt 事件处理中&#xff0c;return 语句的使用是另一个关键概念&#xff0c;它与 event->accept()/event->ignore() 密切相关但作用不同。让我们详细分析一下它们之间的关系和工作原理。 核心区别&#xff1a;不同层级的事件处理 方…...

GAN模式奔溃的探讨论文综述(一)

简介 简介:今天带来一篇关于GAN的,对于模式奔溃的一个探讨的一个问题,帮助大家更好的解决训练中遇到的一个难题。 论文题目:An in-depth review and analysis of mode collapse in GAN 期刊:Machine Learning 链接:...

联邦学习带宽资源分配

带宽资源分配是指在网络中如何合理分配有限的带宽资源&#xff0c;以满足各个通信任务和用户的需求&#xff0c;尤其是在多用户共享带宽的情况下&#xff0c;如何确保各个设备或用户的通信需求得到高效且公平的满足。带宽是网络中的一个重要资源&#xff0c;通常指的是单位时间…...