案例效果可以看上图所示的gif动图。
1:设计思路
该效果的实现,主要依靠拖尾渲染器(Trail Renderer)来实现,创建一个球体,给该球体添加
Trail Renderer组件,再创建一个控制球体产生的脚本,即可实现效果。
2:天空盒子设置
为更好的衬托出流星的氛围,天空盒子为宇宙背景,创建一个新Material,命名为SkyBox1
设置如下:
3:创建球体(流星)预制体
3.1创建球体并添加Trail Renderer组件
在场景中创建一个球体,并改名为StarPrefab,给StarPrefab添加Trail Renderer组件,设置如下:
其中,需要注意:
1处为渲染的宽度,
2处为渲染时间
3处为颜色,在此我设置的透明度较低
4处为渲染的材质,我是使用默认的材质,不然没有材质,效果为紫色。
3.2给流星添加运动动画
流星需要运动,想看出Trail Renderer的渲染轨迹,也需要运动,在此本人使用动画来实现。
给球体starPrefab添加一个Animation动画,并在Animator中设置好动画,不是循环播放动画。
动画设置如下;
这样就实现了流星的运动,
在Assets中创建Prefabs文件夹,将该球体starPrefab拖拽进Assets中的Prefabs文件中,形成预制体。
3.3控制流星销毁
给流星starPrefab添加脚本StarMove.cs 用来控制流星的销毁。代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class StarMove : MonoBehaviour
{
void Update()
{
if (transform.position.x == -10 && transform.position.y == -10)
{
Destroy(gameObject);
}
}
}
4:添加控制流星产生的脚本
给摄像机添加一个脚本,命名为StarMannager.cs ,改脚本主要用于控制流星预制体的产生,代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class StarMannager : MonoBehaviour
{
public GameObject starPrefab;
float time=0.5f;
float timer = 0;
void Update()
{
//设置一个计时器
timer += Time.deltaTime;
if (timer<time)
{
return;
}
timer = 0;
time = Random.Range(0, 5)*0.3f;
//产生流星
GameObject star = Instantiate(starPrefab);
star.transform.position = new Vector3(Random.Range(10,30),Random.Range(10,30),0.2f);
}
}
在此,所有需要设置的环节均已完成。