53 lines
1.3 KiB
C#
53 lines
1.3 KiB
C#
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<LineRenderer>();
|
|
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);
|
|
}
|
|
}
|
|
}
|