Unity3D官方自带的开场动画
一、制作下雨的雨滴涟漪
步骤1:准备素材与基础对象
在Project窗口中新建一个名为“rainFX”的文件夹,将图片素材“RainStreak”及“Ripple”导入到该文件夹中。创建一个Plane对象,将其重命名为“RippleObj”。接着,创建一个Material,命名为“ripple”。为了使“Ripple”贴图的背景透明,需要将导入的“Ripple”贴图的“Alpha from Grayscale”选项勾选。
步骤2:设置材质属性
将“ripple”材质赋给“RippleObj”。修改该材质的Shader为“Particles/Additive”,把“Ripple”贴图赋给“ripple”材质的Texture属性。在Inspector窗口中,对Particle Texture进行如下设置:将Tiling的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帧:offset.x为0
- 0.05帧:offset.x为0.1666
- 0.1帧:offset.x为0.3333
- 0.15帧:offset.x为0.5
- 0.2帧:offset.x为0.6666
- 0.25帧: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”变量。
最后,点击运行按钮,即可在场景中看到地上出现很多涟漪的效果。