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开发技巧,觉得有用记得一键三连哦。么么哒

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/840680.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

docxtemplater避坑!!! 前端导出word怎么插入本地图片或base64 有完整示例

用docxtemplater库实现前端通过模板导出word,遇到需求,要插图片并转成word并导出,在图片转换这块遇到了问题,网上查示例大多都跑不通,自己琢磨半天,总算搞明白了。 附上清晰完整示例,供参考。 …

SpringCloudAlibaba:6.2RocketMQ的普通消息的使用

简介 普通消息也叫并发消息&#xff0c;是发送效率最高&#xff0c;使用最多的一种 依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSch…

【强化学习的数学原理-赵世钰】课程笔记(三)贝尔曼最优公式

目录 学习引用内容梗概1. 第三章主要有两个内容2. 第二章大纲 二.激励性实例&#xff08;Motivating examples&#xff09;三.最优策略&#xff08;optimal policy&#xff09;的定义四.贝尔曼最优公式&#xff08;BOE&#xff09;&#xff1a;简介五.贝尔曼最优公式&#xff0…

专为汽车内容打造的智能剪辑解决方案

汽车内容创作已成为越来越多车主和汽车爱好者热衷的活动。然而&#xff0c;如何高效、便捷地将行车途中的精彩瞬间转化为高质量的视频作品&#xff0c;一直是困扰着广大用户的一大难题。美摄科技凭借其深厚的视频处理技术和智能分析能力&#xff0c;推出了专为汽车内容记录而生…

C语言数据结构栈的概念及结构、栈的实现、栈的初始化、销毁栈、入栈、出栈、检查是否为空、获取栈顶元素、获取有效元素个数等的介绍

文章目录 前言栈的概念及结构栈的实现一、 栈结构创建二、 初始化结构三、销毁栈四、入栈五、出栈六、检查是否为空七、获取栈顶元素八、获取有效元素的个数九、测试 1十、测试 2总结 前言 C语言数据结构栈的概念及结构、栈的实现、栈的初始化、销毁栈、入栈、出栈、检查是否为…

意外发现openGauss兼容Oracle的几个条件表达式

意外发现openGauss兼容Oracle的几个条件表达式 最近工作中发现openGauss在兼容oracle模式下&#xff0c;可以兼容常用的两个表达式&#xff0c;因此就随手测试了一下。 查看数据库版本 [ommopenGauss ~]$ gsql -r gsql ((openGauss 6.0.0-RC1 build ed7f8e37) compiled at 2…

数据结构----堆的实现(附代码)

当大家看了鄙人的上一篇博客栈后&#xff0c;稍微猜一下应该知道鄙人下一篇想写的博客就是堆了吧。毕竟堆栈在C语言中常常是一起出现的。那么堆是什么&#xff0c;是如何实现的嘞。接下来我就带大家去尝试实现一下堆。 堆的含义 首先我们要写出一个堆&#xff0c;那么我们就需…

kubernetes之prometheus kube-controller-manager。 scheduler报错问题

项目场景&#xff1a; prometheus scheduler及kube-controller-manager监控报错 问题描述 kubeadm搭建完kube-prometheus 会有这个报错 原因分析&#xff1a; rootmaster2:~# kubectl describe servicemonitor -n kube-system kube-controller-manager通过以上图片我们发现 k…

php TP8 阿里云短信服务SDKV 2.0

安装&#xff1a;composer require alibabacloud/dysmsapi-20170525 2.0.24 官方文档&#xff1a;短信服务_SDK中心-阿里云OpenAPI开发者门户 (aliyun.com) 特别注意&#xff1a;传入参数获得值形式 正确&#xff1a; $PhoneNumbers $postData[PhoneNumbers];$signName $po…

单片机设计注意事项

1.电源线可以30mil走线&#xff0c;信号线可以6mil走线 2.LDO推荐 SGM2019-3.3,RT9013,RT9193,1117-3.3V。 3.单片机VCC要充分滤波后再供电&#xff0c;可以接0.1uf的电容 4.晶振附件不要走其他元件&#xff0c;且放置完单片机后就放置晶振&#xff0c;晶振靠近X1,X2。

【全网最全】2024电工杯数学建模A题前三题完整解答matlab+21页初步参考论文+py代码等(后续会更新成品论文)

您的点赞收藏是我继续更新的最大动力&#xff01; 一定要点击如下的卡片链接&#xff0c;那是获取资料的入口&#xff01; 【全网最全】2024电工杯数学建模A题前三题完整解答matlab21页初步参考论文py代码等&#xff08;后续会更新成品论文&#xff09;「首先来看看目前已有的…

二叉树—先后序线索化和先后序线索遍历

有了上篇文章的基础&#xff0c;先序和后序的线索化逻辑一样。 代码如下&#xff1a; void preOrderThreadTree(TreeNode* T,TreeNode** pre) {if (T NULL) {;}else {//printf("%c ", T->val);if (T->lchild NULL) {T->ltag 1;T->lchild *pre;}if …

7款好用到离谱的神级App推荐!

AI视频生成&#xff1a;小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频https://aitools.jurilu.com/ 转眼间&#xff0c;2024年已经是下个月。最近有很多小伙伴的咨询&#xff0c;我也赶紧整理了7款好用的软件&#xff0c;希望对大家有所帮助。 …

Git简介以及下载安装和配置

Git介绍 什么是版本控制?什么是Git?什么是集中式版本控制(了解)分布式版本控制工作流程 Git的安装与配置注册邮箱以及用户名(方便远程使用)初始化项目Git在ideal上的使用(本地) 什么是版本控制? ​ 版本控制是指对软件开发过程中各种程序代码,控制文件及说明文档等文件变更…

清理mysql binglog文件

mysql随着使用时间的推移&#xff0c;binglog文件会越来越大&#xff0c;比如我们的oa系统&#xff0c;上线4年多了&#xff0c;最近总有磁盘空间满影响系统正常使用的情况出现。检查后发现binglog是罪归祸首。 binglog文件最好不要采用应删除的方式清理&#xff0c;如下方式可…

spring cache(三)demo

一、入门demo 1、pom <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.o…

ACL组网实验(华为)

思科设备参考&#xff1a;ACL组网实验&#xff08;思科&#xff09; 更多内容参考&#xff1a;华为ACL配置&#xff08;基本ACL高级ACL综合应用&#xff09; 技术简介 ACL&#xff08;Access Control List&#xff09;技术是一种基于包过滤的流控制技术&#xff0c;主要用于…

ML307R OpenCPU UART使用

一、串口使用流程图 二、串口相关函数介绍 三、实现串口收发 一、串口使用流程图 OneMO ML307R模组提供了2路UART给开发者用于通讯开发&#xff0c;以及1路DBG UART用于log的打印。UART Demo示例可以在SDK&#xff1a;examples\uart\src\cm_demo_uart.c中查看。 串口使用流…

Vue3实战笔记(42)—Vue + ECharts:流量数据可视化的强大组合

文章目录 前言vue3使用echarts标准demo&#xff1a;总结 前言 在前端开发中&#xff0c;数据可视化已经成为了一个不可或缺的部分。Vue.js作为一个轻量级且易于上手的渐进式JavaScript框架&#xff0c;与ECharts这个强大的数据可视化库的结合&#xff0c;使得在Vue应用中构建交…