Unity技术分享

Unity3d制作流星拖尾效果

2018-09-04  本文已影响5人  小黑Unity_齐xc
a.gif

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;
    }
}

运行,即可出现文章顶部的流星效果了。

上一篇下一篇

猜你喜欢

热点阅读