Unity中拖尾渲染器使用解析
发表于2018-10-22
拖尾渲染器是一个组件,主要用于制作跟在场景中的物体后面的拖尾效果来代表它们在到处移动。而下面要和大家介绍的是在开发过程中拖尾渲染器使用情况。
定义
拖尾渲染器就是跟在运动物体后面的东西,前进的过程中,末尾的不断消失,前面的不断生成,有一个长度。长度是以时间计算的,从末尾到头有多少秒的时间就是拖尾的长度。
当物体不运动之后,拖尾也会不断消失:
1.游戏中炮弹后面的拖尾, 以及汽车轮胎拖痕等绚丽特效,unity提供了拖尾渲染器;
2.拖尾渲染器的属性:
Materials:用户渲染拖尾的材质数组。
Size:在材质数组总共有多少元素。
Element 0:用户渲染拖尾的材质的引用;个数由Size决定;
Time:拖尾的长度,以s为单位;
Start Width:开始位置拖尾的宽度;
End Width:结束位置的拖尾宽度;
Colors:拖尾长度颜色渐变的拖尾数组,也可以在这些颜色中使用Alpha;
Color0 ~Color4 拖尾的颜色,从开始到结束;最后一个Color3到Color4的Alpha是从255到0,这样有一个渐变消失的效果
Min Vertex Distance:拖尾锚点之间的最小距离;物体刚开始没有拖尾效果,经过多少距离后开始呈现拖尾效果。这个距离就是这个最小距离。越小精度越高性能越差,越大精度越低性能越好。
AutoDesturct:将这一项设置为允许,来使物体在静止Time后被销毁,就是挂载Trail Renderer组件的整个节点被删除;
注意事项
1.Materials材质:使用一个包含粒子着色器的材质,材质使用的贴图必须是平方尺寸,在size属性中可以设置材质的个数,在Element属性中添加材质;
2.Trail Width:拖尾宽度,配合时间属性可以调节他显示和表现;
3.Trail Colors:通过5种颜色和透明度组合循环变化拖尾,使用这些颜色能控制头部和尾部之间进行渐变;
4.Min Vertex Distance最小顶点距离;
最小顶点距离决定了包含拖尾的物体在一个拖尾段实例化之前必须经过的距离,较小的值将更频繁的创建拖尾段,生成更平滑的拖尾,性能有损失,较大的值将显示出更多的锯齿段,找一个满足效果的最大的值;
5.使用注意:
- 使用拖尾渲染器的时候不能使用其他的渲染器,一般创建一个空节点,添加拖尾渲染组件,将拖尾要跟随的物体设置为它的父亲;
- 最好使用粒子材质,这样可以达到更好的效果;
拖尾渲染器案例
1.创建Unity项目和文件目录
2.导入轮胎拖尾纹理。png(第60)到res文件夹下
3.创建一个材质chehen到res文件夹下,设置材质shader为Particles/Multiply例子,把轮胎拖尾纹理拖进材质
4.创建一个平面plane,给它关联一个绿色的材质球,看起来比较明显
5.创建一个立方体cube,给它关联一个红色的材质球,看起来比较明显
6.给立方体cube创建一个空节点叫trail,给trail添加新组件Trail Renderer,把刚才的chehen材质关联到组件下的Material的Element 0,设置Time拖尾长度为1,拖尾的y轴为-0.3,这样看起来浅一点,短一点。
7.写一个脚本trail_test让立方体cube动起来,关联到立方体cube节点下,从而产生拖尾效果
打开trail_test
using System.Collections; using System.Collections.Generic; using UnityEngine; public class trail_test : MonoBehaviour { //public TrailRenderer trail;//获得孩子节点的TrailRenderer组件 float total_time; // Use this for initialization void Start () { //this.trail.enabled = true;//打开TrailRenderer组件 } // Update is called once per frame void Update () { //定时器写法1 this.total_time += (Time.deltaTime); if(total_time>=5)//5秒后停止,也就是静止 { //this.trail.enabled = false;//关闭TrailRenderer组件,很突兀的那种 return; } //定时器写法2 //this.Invoke("Hello",5.0f); float s = Time.deltaTime * 5;//每秒移动5米 this.transform.Translate(0, 0, s, Space.World);//往世界的Z轴移动 Camera.main.transform.Translate(0, 0, s, Space.World);//让主摄像机也跟着Cube运动, Camera.main就是Tag为MainCamera的节点 } }
8.运行,Cube运行5秒后停止,拖尾也渐渐消失