unity怎么制作下雨
在学习 Unity 之后,我一直对如何在 Unity 中制作下雨效果充满好奇。由于自己不太清楚具体方法,便在网上进行了一番搜索,找到了一篇关于 Unity 制作下雨效果的详细文章,现在将其整理并分享给大家。
之前我看过旧版本的 Unity3D 示例项目 AngryBots,其中的下雨效果给我留下了深刻的印象。刚好前段时间我深入学习了相关知识,现在就将制作下雨效果的过程详细分享出来。
一、使用自带动画系统制作下雨的雨滴涟漪
步骤 1:准备素材和基础对象
在 Project 窗口中新建一个名为 rainFX 的文件夹,将图片素材 RainStreak 及 Ripple 导入到该文件夹中。接着,创建一个 Plane 对象,将其重命名为 RippleObj,再创建一个 Material,命名为 ripple。为了使贴图的背景透明,需要将导入的 Ripple 贴图的 Alpha from Grayscale 选项勾选上。
步骤 2:设置材质属性
将 ripple 材质赋给 RippleObj。修改该材质的 Shader 为 Particles/Additive,把 Ripple 贴图赋给 ripple 材质的 Texture。在 Inspector 窗口中修改 Particle Texture 的属性,将 Tilling 的 x 值设为 0.1666,y 值设为 1;将 offset 的 x 值设为 0.8333,y 值设为 0。选中 RippleObj,将 Shader 下的 Tint Color 改为白色,这样可以让雨滴效果更加明显。
步骤 3:创建动画文件
选中 RippleObj,按下 Ctrl + 6 调出 Animation 窗口,点击窗口下的 Ripple(material),此时会发现下面的选项都是灰色不可选状态。点击 RippleObj 右边的小按钮,会出现 [Create New Clip] 选项,点击该选项。随后会弹出一个对话框,提示保存动画文件,将其命名为 RainAnimation 并保存。此时,Ripple(Material)下的选项就都可以使用了。
步骤 4:添加关键帧
选择 Ripple(Material)下的 Main Tex.offset.x,点击右边的小横线并选择 Add key。拖动时间轴到 0.05 秒,再次点击 Add key,并将 offset.x 的值修改为 0.1666。按照以下时间和值依次添加关键帧:
- 0 帧:Add key,offset.x 为 0
- 0.05 帧:Add key,offset.x 为 0.1666
- 0.1 帧:Add key,offset.x 为 0.3333
- 0.15 帧:Add key,offset.x 为 0.5
- 0.2 帧:Add key,offset.x 为 0.6666
- 0.25 帧:Add key,offset.x 为 0.8333
步骤 5:修改动画曲线并添加透明度渐变
此时的 Animation 窗口中有一条从 0.0 - 0.25 秒的红色斜线,用鼠标框选六个关键帧,右键点击红色的关键点,选择 Both Tangents -> Constant,将斜线改为梯形上升的线。接着选择 Tint Color.a,在 0.0 秒帧将 Tint Color.a 的值修改为 1,在 0.25 秒帧(即最后一帧)将 Tint Color.a 的值设置为 0,使动画产生透明渐变的效果。至此,涟漪效果制作完成。
步骤 6:添加脚本控制涟漪消失
创建一个名为 RippleDestroy 的脚本,代码如下:
using UnityEngine;
using System.Collections;
public class RippleDestroy : MonoBehaviour
{
public void DestroyMe()
{
Destroy(gameObject); // 删除自身
}
}
将该脚本赋给 RippleObj。在 Animation 窗口中,在 0.25 秒帧(最后一帧)处,点击右边的 Add Event 按钮,添加一个事件并将 DestroyMe() 方法赋给 Function。
步骤 7:创建预制体并实现涟漪随机生成
将 RippleObj 拖到 rainFX 文件夹中,使其成为一个 Prefab,然后删除场景中的 RippleObj。创建一个空物体,选择 GameObject -> Create Empty,将其改名为 ripple,此时场景中只有 Main Camera 和 ripple。
创建一个名为 rippleFX 的脚本,代码如下:
using UnityEngine;
using System.Collections;
public class rippleFX : MonoBehaviour
{
public GameObject rippleObj; // 涟漪实例
int ti; // 计时器
void Start ()
{
}
void Update ()
{
ti++;
if(ti >= 5) // 每隔 5 帧,计时器发生作用
{
GameObject tempObj = Instantiate(rippleObj) as GameObject; // 复制涟漪物体
tempObj.transform.parent = gameObject.transform; // 设置子物体
tempObj.animation.Play(); // 播放动画文件
tempObj.transform.position = transform.position + new Vector3(Random.Range(-10, 10), 0, Random.Range(-10, 10)); // 移动涟漪物体到一个随机位置
}
}
}
将 rippleFX 脚本赋给空物体 ripple,再将 Prefab 物体 RippleObj 赋给 ripple 的脚本中的变量 RippleObj。点击运行,即可看到地上出现很多涟漪的效果。
二、使用 Unity3D 的粒子系统制作下落的雨滴
步骤 1:新建粒子系统
选择 GameObject -> Create other -> Particle System,创建一个粒子系统并将其改名为 raindrop。
步骤 2:创建并设置材质
新建一个材质(Material),将其命名为与贴图相同的名称 RainStreak,修改该材质的 Shader 为 Particles/Additive。将贴图 RainStreak 赋给该材质,修改 Tiling 的 x 值为 8。同时,将 RainStreak 贴图的 Wrap Mode 修改为 Clamp,这样设置的目的是使贴图在单位面积上显示 8 个,让单个贴图的面积变小,并且使粒子系统中显示的粒子为变小后的单个贴图。
步骤 3:应用材质到粒子系统
将 RainStreak 的 Material 赋给粒子系统的 Render 下面的 Material,此时粒子系统中显示的即为雨滴的贴图。
步骤 4:调整粒子系统参数
修改粒子系统的 Shape,使其变为圆柱形。通过调节参数 Emission 下的 Rate,可以修改雨滴的密度;通过调节 Rotate by Speed 下的 Angular Velocity,可以改变雨滴的下落方向。多调整各个参数,以便达到更好的效果。
至此,下雨效果制作完成,不过这里的效果可能看起来比较粗糙。另外,可以把所用到的材质、贴图、脚本等资源全部放到 rainFX 文件夹中,方便以后直接使用。
我已将素材及工程源文件上传到网盘,大家可以点击下面的链接下载查看: 素材及工程源文件