| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 | 
							- using System;
 
- using System.Collections;
 
- using System.Collections.Generic;
 
- using UnityEngine;
 
- public class TailingLine : MonoBehaviour
 
- {
 
-     [System.Serializable]
 
-     public class LinePointInfo
 
-     {
 
-         public Vector3 pos;
 
-         public Vector3 rotion;
 
-         public Vector3 dir;
 
-     }
 
-     public AnimationCurve offQuanZhong;
 
-     public float quanZhong=5;
 
-     public float disStrength=0.5f;
 
-     // public float addTime;
 
-     public Transform rootTran;
 
-     public int count;
 
-     public float maxDis;
 
-     private LineRenderer _lineRenderer;
 
-     public List<LinePointInfo> _linePointInfo = new List<LinePointInfo>();
 
-     protected float minDis;
 
-     private void Awake()
 
-     {
 
-         _linePointInfo.Clear();
 
-         _lineRenderer = GetComponent<LineRenderer>();
 
-         Init();
 
-     }
 
-     private void Init()
 
-     {
 
-         minDis = maxDis / count;
 
-         // Vector3 startPos = rootTran.position;
 
-         Vector3 startRot = rootTran.rotation.eulerAngles;
 
-         _lineRenderer.positionCount = count;
 
-         for (int i = 0; i < count; i++)
 
-         {
 
-             LinePointInfo linePointInfo = new LinePointInfo();
 
-             Vector3 pos = rootTran.transform.TransformPoint(new Vector3(0, 0, minDis * i * -1));
 
-             linePointInfo.pos = pos;
 
-             linePointInfo.rotion = startRot;
 
-             linePointInfo.dir = rootTran.transform.forward;
 
-             _lineRenderer.SetPosition(i, linePointInfo.pos);
 
-             _linePointInfo.Add(linePointInfo);
 
-         }
 
-     }
 
-     void Start()
 
-     {
 
-     }
 
-     // Update is called once per frame
 
-     void Update()
 
-     {
 
-         LinePointInfo linePointInfo = _linePointInfo[0];
 
-         linePointInfo.pos = rootTran.position;
 
-         linePointInfo.rotion = rootTran.rotation.eulerAngles;
 
-         linePointInfo.dir = rootTran.transform.forward;
 
-         _lineRenderer.SetPosition(0, linePointInfo.pos);
 
-         // float at = (1 - addTime) / _linePointInfo.Count;
 
-         int m = 2;
 
-         int c = _linePointInfo.Count - m;
 
-         float quanZhongWidget = 1.0f / c;
 
-         for (int i = 1; i < _linePointInfo.Count; i++)
 
-         {
 
-             float w = i * 1.0f / _linePointInfo.Count;
 
-             float at = offQuanZhong.Evaluate(w);
 
-             if (at <= 0)
 
-             {
 
-                 at = 0.01f;
 
-             }
 
-             LinePointInfo point = _linePointInfo[i];
 
-             LinePointInfo lasetPoint = _linePointInfo[i - 1];
 
-             Vector3 dir = lasetPoint.pos - point.pos;
 
-             float md = dir.magnitude;
 
-             if (md < minDis)
 
-             {
 
-                 md = minDis;
 
-             }
 
-             else
 
-             {
 
-                 md = Mathf.Lerp(md, minDis, at*disStrength);
 
-             }
 
-             if (m == i)
 
-             {
 
-                 var sin = Mathf.Sin(Time.time);
 
-                 var cos = Mathf.Cos(Time.time);
 
-                 Quaternion quaternion = Quaternion.Euler(sin * quanZhong, cos * quanZhong, 0);
 
-                 dir = quaternion * dir;
 
-             }
 
-             Vector3 newDir = Vector3.Lerp(dir.normalized, lasetPoint.dir, at).normalized;
 
-             point.pos = lasetPoint.pos + (newDir * (md * -1));
 
-             point.dir = newDir;
 
-             _lineRenderer.SetPosition(i, point.pos);
 
-         }
 
-     }
 
- }
 
 
  |