文章目录

  • 一.效果展示
  • 二.下雨
  • 三.打雷

一.效果展示

最近在做一款黑暗风的FPS小游戏,看到资源包的demo scene里有雷雨效果,就学了下并用到了自己的游戏里。下面是先效果展示:
 
//移动端gif可以点开来循环播放,但pc端要再看一遍只能刷新…

二.下雨

首先找一张雨点的贴图,做成材质球

shader用legacy shader/particles/additive,选贴图,把颜色改成自己想要的效果(如果选particles/alpha blended会很暗,像我效果图里一样黑色的雨)

创建一个粒子系统,命名为rain,把rotation的x 从-90改成90,粒子就会往下运动

把renderer里的material改成自己新建的材质,粒子就会变成雨点

将shape改成box,就能形成一个类似降雪的效果。根据自己需求,调节scale大小,形成一个降雨区。

勾选color over lifetime,创建一个从透明到不透明的渐变效果

但现在还只是类似下雪的效果,我们需要调节他的速度和密度

duration 和 start lifetime 来调节循环周期和粒子存活时间
start speed和 gravity modifier(重力增强) 调节速度
max particles 调节粒子的密度(模拟雨量大小)
rate over time 同时影响了密度和速度

雨滴大小可以修改start size,点最右边的小黑点可以选择范围

如果你觉得看不到雨点效果,试着把start color改成白色(最明显),color over time先关掉,然后renderer的参数改成这样再看看

看到了效果再继续调各种参数,直到满足你想要的的效果

三.打雷

准备工作,闪电贴图如下(放进unity里用sprite editor切开)

创建一个空对象,命名为lighting,添加一个sprite renderer组件

改变相机背景色(闪电划过时要变亮一点)
把clear flag设置为solid color,即可自己选用背景色

然后是控制脚本的编写

大体思路是 每次updata随机生成delay(两次打雷间隔)和flashdelay(电光和雷声的间隔)
iswaiting,判断是否开启协程。

Flashone中把电光light启用,光强度随机,闪电sprit也启用,形状和位置大小都随机,
相机背景色也改成稍亮的背景

Yield return new waitforsecond(lightduration)

相机背景和闪电和光关闭,再开启一个flashdelay的协程,在该协程里开启flashtwo(带声音的第二次电闪)

Two和one类似,但加上了声音(模拟先光后声,简单点也可以只有声音没有新的电光)
然后开启新协程,把iswaiting改回来

using UnityEngine;
using System.Collections;public class LightningScript : MonoBehaviour {[Header("Light Intensity")]public float minIntensity = 1.0f;public float maxIntensity = 3.0f;[Header("Light Duration")]//How long the light should be visiblepublic float lightDuration = 0.025f;[Header("Delay Between Flashes")]//Delay between lightning flashespublic float minFlashDelay = 0.05f;public float maxFlashDelay = 2.0f;[Header("Total Delay")]//Time between ligthing effect//15 seconds defaultpublic float minDelay = 5.0f;public float maxDelay = 15.0f;//Total delay timefloat delay;//Delay time between lightning one//and lightning twofloat flashDelay;bool isWaiting = false;[Header("Background Color")]//Default background colorpublic Color mainBackgroundColor;//Lightning background colorpublic Color lightningBackgroundColor;[Header("Lightning Size")]//Minimum size of the lightning spritepublic float minSize;//Maximum size of the lightning spritepublic float maxSize;[Header("Components")]//Gun camerapublic Camera gunCamera;//The light componentpublic Light lightObject;//Audio sourcepublic AudioSource lightningSound;//Array holding the lightning spritespublic Sprite[] lightningSprites;//Sprite rendererpublic SpriteRenderer lightningSpriteRenderer;public AudioClip thunder;//Position and scale values for //the lightning sprite rendererfloat x;float y;float z;Vector3 lightningPos;float lightningScale;private void Start () {//Make sure its off at startlightObject.enabled = false;//Set the background color of the gun cameragunCamera.backgroundColor = mainBackgroundColor;}private void Update () {//Random value for how long the waiting should bedelay = (Random.Range (minDelay, maxDelay));//Random value for how long the delay between the flashes should beflashDelay = (Random.Range (minFlashDelay, maxFlashDelay));//If is waiting is false, and the random value is 15if (!isWaiting) {//Start light flash oneStartCoroutine (LightFlashOne ());//Is waitingisWaiting = true;}}//First light flashprivate IEnumerator LightFlashOne () {//Enable the lightlightObject.enabled = true;//Set a random intensity valuelightObject.intensity = (Random.Range (minIntensity, maxIntensity));//Wait for set amount of time//Set the background color of the gun cameragunCamera.backgroundColor = lightningBackgroundColor;//Enable the lightning sprite rendererlightningSpriteRenderer.enabled = true;//Show a random lightning sprite from the arraylightningSpriteRenderer.sprite = lightningSprites [Random.Range (0, lightningSprites.Length)];//Get random position for lightning sprite rendererx = Random.Range(-150, 150);y = Random.Range(55, 65);z = Random.Range(300, 450);lightningPos = new Vector3 (x, y, z);//Choose random scale valuelightningScale = Random.Range(minSize, maxSize);//Move the sprite renderer to the new positionlightningSpriteRenderer.transform.position = lightningPos;lightningSpriteRenderer.transform.localEulerAngles = new Vector3(0, Random.Range(0,360), 0);//Set the sprite renderer to the new scalelightningSpriteRenderer.transform.localScale = new Vector3 (lightningScale,lightningScale,lightningScale);yield return new WaitForSeconds (lightDuration);//Disable the lightlightObject.enabled = false;//Set the background color of the gun cameragunCamera.backgroundColor = mainBackgroundColor;//Disable the lightning sprite rendererlightningSpriteRenderer.enabled = false;//Start the flash delayStartCoroutine (FlashDelay ());}//Delay between LightFlashOne one and LightFlashTwoprivate IEnumerator FlashDelay () {//Wait for set amount of timeyield return new WaitForSeconds (flashDelay);//Start light flash twoStartCoroutine (LightFlashTwo ());}//Second light flashprivate IEnumerator LightFlashTwo () {//Enable the lightlightObject.enabled = true;//Set a random intensity valuelightObject.intensity = (Random.Range (minIntensity, maxIntensity));//Set the background color of the gun cameragunCamera.backgroundColor = lightningBackgroundColor;//Enable the lightning sprite rendererlightningSpriteRenderer.enabled = true;//Show a random lightning sprite from the arraylightningSpriteRenderer.sprite = lightningSprites [Random.Range (0, lightningSprites.Length)];//Get random position for lightning sprite rendererx = Random.Range(-150, 150);y = Random.Range(55, 65);z = Random.Range(300, 450);lightningPos = new Vector3(x, y, z);//Choose random scale valuelightningScale = Random.Range(minSize, maxSize);//Move the sprite renderer to the new positionlightningSpriteRenderer.transform.position = lightningPos;lightningSpriteRenderer.transform.localEulerAngles = new Vector3(0, Random.Range(0, 360), 0);//Set the sprite renderer to the new scalelightningSpriteRenderer.transform.localScale = new Vector3 (lightningScale,lightningScale,lightningScale);//Play soundlightningSound.clip = thunder;lightningSound.Play();//Wait for set amount of timeyield return new WaitForSeconds (lightDuration);//Disable the lightlightObject.enabled = false;//Set the background color of the gun cameragunCamera.backgroundColor = mainBackgroundColor;//Disable the lightning sprite rendererlightningSpriteRenderer.enabled = false;//Start the waiting timerStartCoroutine(Timer());}//Time between lightningsprivate IEnumerator Timer () {//Wait for set amount of timeyield return new WaitForSeconds (delay);//Is not waitingisWaiting = false;}
}

新建一个manger,挂上脚本,调参数,加对象(相机背景色和电闪时的背景色,主相机,电闪时的环境光,雷声,闪电sprite…)

注意别忘记给manger加audio sourece组件,用于播放打雷音效

END

【Unity】天气特效:打雷下雨相关推荐

  1. Unity粒子特效系列-下雨预制体做好了,拿走直接就用!

    欢迎评论或私信,只要是小空知道的一定会逐一回复的!

  2. Unity 屏幕特效 之 简单地调整颜色的 色散效果 的实现

    Unity 屏幕特效 之 简单地调整颜色的 色散效果 的实现 目录 Unity 屏幕特效 之 简单地调整颜色的 色散效果 的实现 一.简介

  3. Unity 屏幕特效 之 简单地使用 Shader 获取深度,实现景深效果

    Unity 屏幕特效 之 简单地使用 Shader 获取深度,实现景深效果 目录

  4. Unity 屏幕特效 之 热浪扭曲效果的实现

    Unity 屏幕特效 之 热浪扭曲效果的实现 目录 Unity 屏幕特效 之 热浪扭曲效果的实现 一.简介 二.关键技术

  5. Unity半透明特效原理讲解(为什么半透明设置渲染顺序和深度写入这么重要)

    Unity半透明特效原理讲解(为什么半透明设置渲染顺序和深度写入这么重要 写在前面 实验场景 实验1:红(不透明)+蓝(不透明)+默认渲染顺序(先渲染蓝Cube) 实验2:红(不透明+优先渲染)+蓝( ...

  6. Unity 屏幕特效 之 简单地调整颜色的亮度、饱和度、对比度

    Unity 屏幕特效 之 简单地调整颜色的亮度.饱和度.对比度 目录 Unity 屏幕特效 之 简单地调整颜色的亮度.饱和度.对比度 一.简介

  7. Unity vfx特效-B站课程学习

    学习的是这门课程:Unity vfx特效手把手实践篇_哔哩哔哩_bilibili  UP:St_Games同人游戏社团 1.柱子 首先是排布方格,这里主要是使用了取余的方法.我的理解是和游戏中的AOI ...

  8. Webgl实现的天气效果(下雨、下雪)

    一.下雨效果如图: 还有一种雨水效果也不错 114 Three.js实现深度遮挡的下雨特效 | 暮志未晚-中文案例网 二.下雪的效果 57 Three.js 使用粒子实现下雪特效 | 暮志未晚-中文案 ...

  9. Unity Shader特效:人物模型动态流动光特效

    本文写于2017-6-6,转载请注明 以下为正文 ---------------------------------------------------------- 先上效果图: Shader界面图 ...

  10. unity水特效与标准资源包的下载导入

    由于本个实例需要使用unity的标准资源包 一: 方法一: 1.进入unity官网 https://unity.cn/ 2.点击页面的Beta版本 3.找到对应自己版本下载即可 方法二: 在unity ...

最新文章

  1. 输入示例,自动生成代码:TensorFlow官方工具TF-Coder已开源
  2. oracle sid环境变量,ORACLE_SID环境变量设置的问题
  3. python—OpenCV2中 cv2.VideoCapture(),read(),waitKey()的使用
  4. 5.1 Tensorflow:图与模型的加载与存储
  5. python可以做二维码吗_Python制作二维码,并且可以添加logo
  6. 信息学奥赛一本通(2022:【例4.7】最小n值)
  7. 怎么把外部参照合并到图纸_如何在CAD制图中将两个图合并到一个图纸上
  8. 大型网站之网站静态化(综合篇)
  9. Pygame实战:这款“欢乐打地鼠”小游戏让几亿人“上瘾“?不玩绝对是你的损失。
  10. selenium定位到元素后获取其属性_selenium定位tr及td,并获取其文本及属性
  11. 微商相册图文添加自己喜欢的文字呢
  12. Python无法打开excel文档解决办法
  13. php中的乐观锁和悲观锁
  14. 鸿蒙是什么动物,悟空是猴,八戒是猪,沙和尚是什么动物?乌巢禅师一句话说出答案...
  15. 联想Thinkpad E420 重装系统
  16. Ae 效果快速参考:颜色校正
  17. 数学建模中的插值问题
  18. 中国工业管道过滤器市场深度研究分析报告
  19. ios pod的使用遇到 library not found for -lPods
  20. 乐Phone征途、联想谋变和iAD可能

热门文章

  1. 七种常见的数据分析法之:帕累托法则
  2. 电脑图片不显示,电脑不显示图片怎么办
  3. 手把手教你获取一年免费通配符泛域名SSL证书
  4. 微信小程序实战之 goods(订餐页)
  5. excel减法函数_在excel中进行减法7个例子,包括公式中带条件的减法
  6. 深入探讨MFC消息循环和消息泵
  7. 阿里根据截图查到泄露者,这样的技术是如何做到的?
  8. 微信商户批量转账到零钱
  9. LOCAL_CERTIFICATE作用
  10. 了解一下,Android 10中的ART虚拟机(2)