记录一下,方便使用
第一种是用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