广告合作
  • 今日头条

    今日头条

  • 百度一下

    百度一下,你就知道

  • 新浪网

    新浪网 - 提供新闻线索,重大新闻爆料

  • 搜狐

    搜狐

  • 豆瓣

    豆瓣

  • 百度贴吧

    百度贴吧——全球领先的中文社区

  • 首页 尚未审核订阅工具 订阅

    Unity 闪电特效之 闪电链效果的简单实现

    来源:网络收集  点击:  时间:2024-08-21
    【导读】:
    Unity 闪电特效之 闪电链效果的简单实现。本节介绍,在Unity开发中,闪电链特效的简单实现方法,具体如下工具/原料moreUnity方法/步骤1/9分步阅读

    打开Unity,新建一个工程,具体如下图

    2/9

    在工程中新建两个 GameObject 调整好合适位置,为了方便观察,可以再其下添加子物体 Cube,具体如下图

    3/9

    在工程中新建脚本ChainLightning,双击打开编辑,具体如下图

    4/9

    ChainLightning 脚本的具体代码和代码说明如下图

    5/9

    ChainLightning 脚本的具体内容如下:

    usingSystem.Collections.Generic;

    usingUnityEngine;

    //普通的类,加上ExecuteInEditMode,就可以在编辑器模式中运行

    publicclassChainLightning:MonoBehaviour{

    publicfloatdetail=1;//增加后,线条数量会减少,每个线条会更长。

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

    publicTransformEndPostion;//链接目标

    publicTransformStartPosition;

    publicfloatyOffset=0;

    privateLineRenderer_lineRender;

    privateListVector3_linePosList;

    privatevoidAwake()

    {_lineRender=GetComponentLineRenderer();

    _linePosList=newListVector3();

    }

    privatevoidUpdate()

    {

    //判断是否暂停,未暂停则进入分支

    if(Time.timeScale!=0)

    {

    _linePosList.Clear();

    Vector3startPos=Vector3.zero;

    Vector3endPos=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(inti=0,n=_linePosList.Count;in;i++)

    {

    _lineRender.SetPosition(i,_linePosList);

    }

    }

    }

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

    privatevoidCollectLinPos(Vector3startPos,Vector3destPos,floatdisplace)

    {

    //递归结束的条件

    if(displacedetail)

    {

    _linePosList.Add(startPos);

    }

    else

    {

    floatmidX=(startPos.x+destPos.x)/2;

    floatmidY=(startPos.y+destPos.y)/2;

    floatmidZ=(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;

    Vector3midPos=newVector3(midX,midY,midZ);

    //递归获得点

    CollectLinPos(startPos,midPos,displace/2);

    CollectLinPos(midPos,destPos,displace/2);

    }

    }

    }

    6/9

    脚本编译正确回到Unity,导入一张闪电图,并新建一个Material,把Shader改为Particles/Additive把导入的贴图给 Material 赋上,具体如下图

    7/9

    在场景中,新建一个空物体,把脚本挂载上去,适当的调整脚本参数的值,效果如下图

    8/9

    在调整Material的参数,使得只出现一条闪电,具体如下图

    9/9

    最终效果(作为参照的Cube可以删掉)如下图

    注意事项

    您的支持,是我们不断坚持知识分享的动力,若帮到您,还请帮忙投票有得;若有疑问,请留言

    UNITY闪电特效闪电链效果
    本文关键词:

    版权声明:

    1、本文系转载,版权归原作者所有,旨在传递信息,不代表看本站的观点和立场。

    2、本站仅提供信息发布平台,不承担相关法律责任。

    3、若侵犯您的版权或隐私,请联系本站管理员删除。

    4、文章链接:http://www.ff371.cn/art_1147495.html

    相关资讯

    ©2019-2020 http://www.ff371.cn/ 国ICP备20009186号06-01 16:54:21  耗时:0.722