Unity学习之路-简易闪电链特效

Github:https://github.com/BellflowerRinging/UnityTest/Assest/Lightning/

效果:

Unity学习之路-简易闪电链特效_第1张图片

就写思路把,反正大把大神的效果实现得比我好。

写得简单,以后补充,若有改进的地方,请指出。

先用Shader写一个材质,中间白两边蓝的渐变颜色,顺便渐变一下透明度

Unity学习之路-简易闪电链特效_第2张图片

然后把材质应用到Line Renderer组件里,然后创建一个go,包括闪电起点终点等。

Unity学习之路-简易闪电链特效_第3张图片

这个脚本让直线躁动起来,闪电每一小段的平均长度为0.2,躁动频率为0.5。

大概思路是从起点出发,在面向终点的方向,间隔SegementLength取一点,在这一点一定范围内再取随机一点,连接这个随机点和起点(上一个点),以此类推,直到最后一点与终点距离小于等于SegementLength为止,连接最后一点与终点,构成一条闪电链。

然后以每NoiseSpeed一次的频率,不断变化line,不断构成一条闪电链接。

主要代码

    void InitLine(LineRenderer line, Vector3 star, Vector3 end, float msLength)
    {
        if (msLength <= 0) return;
        
        List list = new List();
        list.Add(star);

        msLength = UnityEngine.Random.Range(msLength * 0.5f, msLength * 2.5f); //实现bilibili效果,偶有一次幅度要大一点的
        
        Vector3 loc = star, dirct;
        while (Vector3.Distance(loc, end) >= msLength)
        {
            dirct = (end - loc).normalized * msLength;
            loc += dirct;
            loc += RandomOffect(msLength * 2 / 3); // 乘上2/3 效果要好一点
            list.Add(loc);
        }

        list.Add(end);
        Vector3[] postions = list.ToArray();
        line.positionCount = postions.Length;
        line.SetPositions(postions);
        return;
    }

    Vector3 RandomOffect(float maxOffset)
    {
        return new Vector3(UnityEngine.Random.Range(-maxOffset, maxOffset),
         UnityEngine.Random.Range(-maxOffset, maxOffset), 
         UnityEngine.Random.Range(-maxOffset, maxOffset));
    }

 

 

 

你可能感兴趣的:(Unity学习之路)