拖尾是一种很酷的特效。拖尾的原理来自人类的视觉残留:观察快速移动的明亮物体,会看到物体移动的轨迹。摄像机通过调整快门时间,也可以拍出具有拖尾效果的照片,如在城市的夜景中,汽车的尾灯拖曳出红色的线条。
在较老的Unity版本中,拖尾效果需要用插件实现。现在Unity已经内置了Trail Renderer(拖尾渲染器)组件,可以方便地制作出拖尾效果。
拖尾渲染器组件的使用比较简单,其步骤如下。
- 新建一个球体,为其添加Trail Renderer组件
- 不需要运行游戏,直接在场景中改变球体的位置,就会看到拖尾效果。但由于没有指定拖尾材质,显示是紫红色(紫红色代表材质错误或缺失)。
- 在Trail Renderer组件中找到找到Materials选项,展开该选项,可以指定材质的数量和材质资源。如果已经导入粒子特效素材,那么通过搜索“Trail”可以找到多个拖尾专用的素材,任意选一个即可
- 选择材质,再拖曳物体,就会看到拖尾效果
如图为Sparks的效果
要让拖尾达到较好的效果,就要对拖尾的长度(停留时间)、宽度、材质和颜色渐变等参数进行细致调节。下面将逐一对Trail Renderer组件的属性做说明
属性 | 含义 | 说明 |
Cast Shadows | 是否投射阴影 | 拖尾本身也可以像实体一样投射阴影,但实际上能否投射阴影与材质有关,某些材质本身不能投射阴影(一般不需要阴影) |
Receive Shadows | 是否接受阴影 | 拖尾会显示被其它物体投射的阴影(一般不需要阴影) |
Materials | 材质 | 拖尾的材质。最重要的属性之一 |
Time | 时间 | 拖尾持续的时间。决定了拖尾的总体长度 |
Min Vertex Distance | 最小顶点距离 | 拖尾本身和模型一样,定点是有限多的。此选项指定拖尾两个顶点之间的间距,间距越小顶点就越多、拖尾越顺滑,但性能消耗也更大 |
Auto Destruct | 自动销毁 | 游戏对象空闲时销毁拖尾,可以节约资源 |
Width | 宽度 | 此属性是一个曲线,可以控制拖尾从头部到尾部的粗细变化 |
Color | 颜色 | 用一个颜色梯度控制拖尾颜色的变化 |
Corner Vertices | 角顶点 | 增加这个值,使拖尾的小拐角更圆润 |
End Cap Vertices | 端盖顶点 | 增加这个值,可以让拖尾的端点更圆润 |
Alignment | 对齐 | 拖尾本身是一个“广告牌”,从各个角度看是一样的。可以选择让它朝着摄像机或是z轴 |
Texture Mode | 纹理模式 | 控制材质贴图如何贴到拖尾上。包括Stretch(拉伸)、Wrap(重复纹理)等。贴图方式与材质有关,有些材质适合重复,有些事和拉伸 |
还有一些与光照、高级渲染相关的属性,其使用与光照和渲染有关,此处不再详述。
将拖尾设置完成之后,会在物体运动时自动出现,不需要额外设置。脚本主要是开启或关闭拖尾,以及改变拖尾的时间、材质等,示例如下。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TestTrail : MonoBehaviour
{
TrailRenderer trail;
public Material mat1;
public Material mat2;
void Start()
{
trail = GetComponent<TrailRenderer>();
trail.sharedMaterial = mat1;
}
void Update()
{
if(Input.GetKeyDown(KeyCode.Space))
{
if(trail.sharedMaterial==mat1)
{
trail.sharedMaterial = mat2;
trail.startColor = Color.red;
trail.endColor = Color.red;
}
else
{
trail.sharedMaterial = mat1;
trail.startColor = Color.blue;
trail.endColor = Color.blue;
}
}
}
}
效果如下
拖尾变换特效