using System; using UnityEngine; [RequireComponent(typeof(LineRenderer))] [ExecuteInEditMode] public class Cable_Procedural_Static : MonoBehaviour { private LineRenderer line; [SerializeField] private Transform endPointTransform; [SerializeField] private int pointsInLineRenderer = 5; [SerializeField] private float sagAmplitude = 1f; private Vector3 vectorFromStartToEnd; private Vector3 sagDirection; private void Start() { line = GetComponent(); line.positionCount = pointsInLineRenderer; sagDirection = Physics.gravity.normalized; Animate(); } private void Animate() { if (!endPointTransform) { Debug.LogError("No Endpoint Transform assigned to Cable_Procedural component attached to " + base.gameObject.name); } else { vectorFromStartToEnd = endPointTransform.position - base.transform.position; base.transform.forward = vectorFromStartToEnd.normalized; } for (int i = 0; i < pointsInLineRenderer; i++) { float num = (float)i / (float)(pointsInLineRenderer - 1); float num2 = Mathf.Sin(num * MathF.PI); Vector3 vector = vectorFromStartToEnd * num; Vector3 vector2 = sagDirection * sagAmplitude; Vector3 position = base.transform.position + vector + Vector3.ClampMagnitude(vector2, sagAmplitude) * num2; line.SetPosition(i, position); } } }