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 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM