【Unity】天气特效:打雷下雨

一.效果展示

最近在做一款黑暗风的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 visible
	public float lightDuration = 0.025f;

	[Header("Delay Between Flashes")]
	//Delay between lightning flashes
	public float minFlashDelay = 0.05f;
	public float maxFlashDelay = 2.0f;

	[Header("Total Delay")
  • 18
    点赞
  • 95
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Unity中实现天气特效的切换可以通过以下步骤完成: 1. 创建天气特效预制件:首先,你需要创建不同天气效果的预制件。这可以是雨、雪、晴天等不同天气的效果。你可以使用粒子系统、光照效果、材质等来表现不同的天气效果。 2. 创建天气管理器对象:在场景中创建一个空对象,作为天气管理器。将这个对象命名为"WeatherManager"或者其他你喜欢的名称。 3. 编写天气切换脚本:在天气管理器对象上创建一个新的C#脚本,命名为"WeatherSwitcher"或者其他适合的名称。在这个脚本中,你需要编写代码来切换不同的天气效果。 3.1 在脚本中添加一个公有的枚举类型来表示不同的天气效果,例如: ```csharp public enum WeatherType { Sunny, Rainy, Snowy } ``` 3.2 添加一个公有的变量来存储当前的天气类型,并设置默认值为Sunny: ```csharp public WeatherType currentWeather = WeatherType.Sunny; ``` 3.3 在Start()方法中,根据当前的天气类型实例化对应的天气预制件,并将其作为子对象添加到天气管理器对象中: ```csharp void Start() { GameObject weatherPrefab = null; switch(currentWeather) { case WeatherType.Sunny: weatherPrefab = // Instantiate sunny weather prefab break; case WeatherType.Rainy: weatherPrefab = // Instantiate rainy weather prefab break; case WeatherType.Snowy: weatherPrefab = // Instantiate snowy weather prefab break; } Instantiate(weatherPrefab, transform); } ``` 3.4 添加一个公有的方法用于切换天气,该方法接受一个WeatherType参数,并在切换天气时销毁当前的天气预制件,然后实例化新的天气预制件: ```csharp public void SwitchWeather(WeatherType newWeather) { // Destroy current weather prefab Destroy(transform.GetChild(0).gameObject); // Instantiate new weather prefab GameObject weatherPrefab = null; switch(newWeather) { case WeatherType.Sunny: weatherPrefab = // Instantiate sunny weather prefab break; case WeatherType.Rainy: weatherPrefab = // Instantiate rainy weather prefab break; case WeatherType.Snowy: weatherPrefab = // Instantiate snowy weather prefab break; } Instantiate(weatherPrefab, transform); currentWeather = newWeather; } ``` 4. 在场景中添加天气管理器和其他相关的游戏对象。你可以创建一个UI按钮或其他交互元素,并在点击事件中调用`SwitchWeather()`方法来切换不同的天气效果。 以上步骤是实现Unity天气特效切换的基本思路,你可以根据具体需求进行修改和扩展。希望对你有所帮助!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值