1. 程式人生 > 實用技巧 >Unity 製作雷電特效

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