Unity3d制作流星拖尾效果
2018-09-04 本文已影响5人
小黑Unity_齐xc
a.gif
trail1.jpeg
trail2.jpeg
1.拖尾效果
1.1 新建空物体,命名为star
1.2 新建子空物体,命名为trail;
1.3 trail对象上添加TrailRenderder组件,如下图:
trail1.jpeg
1.4 点击color,编辑颜色
trail2.jpeg
2.流星的移动
通过刚体rigidbody2d来控制
2.1 选中star对象,添加rigidbody2d组件
2.2 选择body type 为Kinematic(运动学),具体请看https://www.jianshu.com/p/004c3e00aeec
2.3 我们通过代码设置rigidbody.velocity的值来控制其运动,创建脚本star
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class star : MonoBehaviour {
Rigidbody2D rigidbody;
public float x = -5;
public float y = -1;
Camera cam;
float size = -1;
void Awake(){
rigidbody = this.GetComponent<Rigidbody2D> ();
rigidbody.velocity = new Vector2 (x,y);
cam = Camera.main;
float height = 2f * cam.orthographicSize;
size = height;
}
void OnEnable()
{
StopAllCoroutines();
StartCoroutine(CoUpdate());
}
IEnumerator CoUpdate()
{
while(true)
{
if(IsBehind())
{
break;
}
yield return new WaitForSeconds(1);;
}
StopCoUpdate();
}
void StopCoUpdate()
{
GameObject.Destroy (gameObject);
StopAllCoroutines();
}
bool IsBehind()
{
//判断是否超出屏幕一定距离
float distance = Vector2.Distance(transform.position, cam.transform.position);
if (distance > size / 2f) {
return true;
}
return false;
}
}
2.4 运行游戏,star物体就会根据物理速率自动运行,拖尾效果也随之出现,一定距离后,会自动销毁该star。
3. 通过预制体实现批量流星效果,如文章顶部的图片
3.1 使用star创建预制体
3.2 使用脚本动态创建star,随机指定初始的位置
3.3 创建脚本starsManager,拖拽给相机对象,并为脚本指定预制体
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class starsManager : MonoBehaviour {
public GameObject pre;
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 go = GameObject.Instantiate (pre);
go.transform.position = new Vector2 (random(),random());
}
private float random(){
return (Random.Range(0, 4) * 0.7f)+4f;
}
}
运行,即可出现文章顶部的流星效果了。