Unity 制作雷电特效

记录一下,方便使用

第一种是用LineRenderer

创建两个空物体,把两个空物体分开,一个设置成起点,一个终点  如下图  把起点终点放到脚本里面

 

 

 挂脚本的物体得有LineRenderer组件,不然会报错(下面上代码)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;


[ExecuteInEditMode] //加了这个之后可以在Editor运行
public class Thunder_Lightning : MonoBehaviour
{
    public float detail = 1;//增加后,线条数量会减少,每个线条会更长。  

    public float displacement = 15;//位移量,也就是线条数值方向偏移的最大值  

    public Transform EndPostion;//链接目标  

    public Transform StartPosition;

    public float yOffset = 0;

    private LineRenderer _lineRender;

    private List<Vector3> _linePosList;

    private void Awake()

    {
        _lineRender = GetComponent<LineRenderer>();

        _linePosList = new List<Vector3>();

    }

    private void Update()

    {
      
        if (Time.timeScale != 0)

        {

            _linePosList.Clear();

            Vector3 startPos = Vector3.zero;

            Vector3 endPos = Vector3.zero;

            if (EndPostion != null)

            {

                endPos = EndPostion.position + Vector3.up * yOffset;

            }

            if (StartPosition != null)

            {

                startPos = StartPosition.position + Vector3.up * yOffset;

            }

            //获得开始点与结束点之间的随机生成点

            CollectLinPos(startPos, endPos, displacement);

            _linePosList.Add(endPos);

            //把点集合赋给LineRenderer

            _lineRender.SetVertexCount(_linePosList.Count);

            for (int i = 0, n = _linePosList.Count; i < n; i++)

            {

                _lineRender.SetPosition(i, _linePosList[i]);

            }

        }

    }

    //收集顶点,中点分形法插值抖动  

    private void CollectLinPos(Vector3 startPos, Vector3 destPos, float displace)

    {

        //递归结束的条件

        if (displace < detail)

        {

            _linePosList.Add(startPos);

        }

        else

        {

            float midX = (startPos.x + destPos.x) / 2;

            float midY = (startPos.y + destPos.y) / 2;

            float midZ = (startPos.z + destPos.z) / 2;

            midX += (float)(UnityEngine.Random.value - 0.5) * displace;

            midY += (float)(UnityEngine.Random.value - 0.5) * displace;

            midZ += (float)(UnityEngine.Random.value - 0.5) * displace;

            Vector3 midPos = new Vector3(midX, midY, midZ);

            //递归获得点

            CollectLinPos(startPos, midPos, displace / 2);

            CollectLinPos(midPos, destPos, displace / 2);

        }

    }
}

创建材质球给LineRenderer 组件  材质球的图片  和材质球的设置

           

 

 

最后效果是这样的 

 第二种 是粒子特效修改的 下面贴上粒子特效的参数,材质球还用上面的就行

 

 

 

 

 

不喜勿喷

 end 

 

posted @ 2020-12-22 17:35  剑起苍穹  阅读(1542)  评论(0编辑  收藏  举报
/*鼠标点击特效*/