线段渲染器和拖尾渲染器

Unity自带的Effect资源包包含了不少Effects和Image Effects的资源。首先,点击导航菜单栏->Assets->Import Package->Effects,导入Effects包。

Effects的功能可以新建空的游戏对象,再添加相关组件实现。Effects组件位于导航菜单栏->Component->Effects下。

线段渲染器

LineRenderer,线渲染器,作用是用于渲染显示“线特效”。

线:就是一根线。我们要想绘制一根线,需要至少两个点,在游戏中也不例外。

现实生活中比如玩具激光灯照射出来的线。

运用

线特效在游戏中常用于渲染激光效果,或者用于子弹瞄准。

创建线特效

①新建一个空游戏物体;
②给这个空游戏物体添加LineRenderer组件,步骤如下:Component->Effects->Line Renderer

2.LineRenderer 材质球
1.Materials(材质球)
设置“线渲染器”这个组件使用哪个材质球来渲染线。

2.制作透明材质球
①创建一个材质球;
②设置该材质球的Shader为Particles/Additive;(粒子/添加物)
③给材质球拖曳赋予贴图;

3.常用属性
1.Positions(位置) 设置线的开始点和结束点的位置。
2.Start Width(开始宽度) 设置线开始时的宽度。
3.End Width(结束宽度) 设置线结束时的宽度。
4.Start Color(开始颜色) 设置线的开始颜色。
5.End Color(结束颜色) 设置线的结束颜色。

线段渲染器(Line Renderer)使用一组3D点,在每个点之间使用材质绘制一条线。当使用特殊贴图的时候,可以实现很酷炫的效果,如一道闪电等。如果该闪电使用一张普通的贴图,用面片也能显示,但是形状是固定的,劈下来的过程也是固定的。而使用线段渲染器的话,这道闪电可以以不同的形状路径劈下来。线段渲染器绘制的线组总是连续的,如果要实现分开的线组,要使用多个线段渲染器游戏对象。它不能绘制一个像素的线(可以使用GL)。

实现

新建一个场景,并新建一个空游戏对象,点击导航菜单栏->Component->Effects->Line Renderer添加Line Renderer组件。新建材质并命名为LineMat,设置Shader为“Unlit/Texture”,设置Line Renderer参数,如下图所示。

效果如图17-5所示。将贴图设置为Colorful贴图,效果如图17-6所示。

线段渲染器由起始点至终点,按照线段显示贴图从左至右的图案,如17-7所示。

实例--闪电效果

新建场景,并点击导航菜单栏> “Window” >”Lighting”,在Lighting视图中点选Scene选项卡,将Skybox设置为None,将摄像机的背景颜色设置为黑色,模拟黑夜的效果。新建材质并命名为LighteningMat,将Shader设置为”Particles/Additive”,并将贴图设置为Lightening 新建空游戏对象,命名为Lightening并添加Line Renderer组件,将材质设置为LighteningMat 新建脚本LighteningManager.es并添加至游戏对象,如代码清单17-2所示。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
using UnityEngine;
using System.Collections;

/// <summary>
/// 实现从上劈下的闪电
/// </summary>
public class LighteningManager : MonoBehaviour
{
public Vector3 startPos; // 闪电起始位置
public Vector3 endPos; // 闪电终止位置
public int steps; // 闪电阶段数
public float duration; // 劈下花费的时间

private LineRenderer lineRenderer;
private int stepNow;

void Awake()
{
// 得到LineRenderer
lineRenderer = GetComponent<LineRenderer>();
}

void OnGUI()
{
if (GUILayout.Button("Start"))
{
Reset();
NextStep();
}
}

void NextStep()
{
// 设置LineRenderer的路径点数
lineRenderer.positionCount= stepNow + 1;

// 计算当前阶段百分比,并得到当前点的坐标
float pcg = (float)(stepNow + 1) / (float)steps;
Vector3 pos = Vector3.Lerp(startPos, endPos, pcg) + new Vector3(Random.Range(-0.5f, 0.5f), Random.Range(-0.1f, 0.1f), 0);

// 设置路经点
lineRenderer.SetPosition(stepNow, pos);

// 未结束时,过一段时间后进行下一步
if (stepNow < steps)
{
stepNow++;
Invoke("NextStep", duration / (float)steps); // 持续时间除以步数,就是每隔多少秒执行下一步。
}
}

/// <summary>
/// 重置LineRenderer
/// </summary>
void Reset()
{
CancelInvoke();
stepNow = 0;
lineRenderer.positionCount = 0;
}
}

拖尾渲染器

拖尾渲染器,作用是用于渲染显示“拖尾特效”。拖尾:物体后面拖着的尾巴,如流星。

在游戏中的运用

比如发射出去的炮弹,子弹,只要这些物体是高速运动的,为了体现他们的运动快,往往都会在他们的后面加上一个拖尾特效。体现物体的运动速度。

创建

添加组件Component->Effects->Trail Renderer,之后reset。在Scene面板中移动物体,可以看到基本的拖尾特效。

Unity中所有以“Renderer‘为后缀进行命名的组件,都需要给他们指定材质球,比如Mesh Renderer。
当这类组件身上没有材质球或材质球丢失的时候,默认就会显示成“粉红色”。

制作透明材质球
①创建一个材质球
②设置该材质球的Shader为Particles/Additive;(粒子/添加物)
③给材质球拖曳赋予贴图

3.TrailRenderer常用属性
1.Time(时间)设置拖尾特效的持续时间。
2.Start Width(开始宽度)设置拖尾开始时的宽度。
3.End Width(结束宽度)设置拖尾结束时的宽度。
4.Color(颜色) 设置拖尾显示的颜色。

在实际开发中,美工人员给我们的贴图往往是“黑白图”,这种图片中黑色是透明区域,白色是不透明区域,可以简单记忆为“黑透白不透”。我们可以通过设置这里的Color属性值,来让白色区域显示成特定的颜色。

给空物体添加拖尾,然后把拖尾拉到物体下成为子物体。

0%