I'm trying to get a good fishing line working - and it feels like it's almost there. Following an old Reddit post in the Unity sub, I was able to take the advice and write a class that has a starting point, end point, and draws a curving line between them.
However, there are two problems with the line. The first is that it 'bounces' heavily when it's first started, and the second is that while it -almost- works, I can't seem to get the last segment to flow like the rest. It attaches to the target, but it looks stiff while the remainder of the fishing line moves correctly. How can I fix these issues?
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Line : MonoBehaviour { public LineRenderer lineRenderer; LineParticle[] lineLength; public Transform targetObject; public float lineRest = 0.8f; public int lineSegmentCount = 30; private Transform tc; private void Awake() { lineRenderer = GetComponent();
tc = transform;
}
public void Start()
{
lineRenderer.positionCount = lineSegmentCount;
lineLength = new LineParticle[lineSegmentCount];
for(int i = 0; i < lineSegmentCount; i++)
{
lineLength[i] = new LineParticle();
}
}
private void Verlet(LineParticle p, float dt)
{
Vector3 temp = p.pos;
p.pos += p.pos - p.oldPos + (p.Accel * dt * dt);
p.oldPos = temp;
}
private void PoleConstraint(LineParticle p1, LineParticle p2, float restLength)
{
Vector3 delta = p2.pos - p1.pos;
float deltaLength = delta.magnitude;
float diff = (deltaLength - restLength) / deltaLength;
p1.pos += delta * diff * .5f;
p2.pos -= delta * diff * .5f;
}
private void LateUpdate()
{
lineLength[0].pos = tc.position;
for (int i = 0; i < lineLength.Length; i++)
{
LineParticle lp = lineLength[i];
Verlet(lp, 0.8f * Time.deltaTime);
int testLP = i + 1;
for (int y = 0; y < 6; y++)
{
if (testLP < lineLength.Length - 1)
{
LineParticle lp2 = lineLength[testLP];
PoleConstraint(lp, lp2, lineRest);
}
if (i == lineSegmentCount - 1)
{
lineLength[i].pos = targetObject.position;
}
lineRenderer.SetPosition(i, lp.pos);
}
}
}
}
public class LineParticle {
public Vector3 pos;
public Vector3 oldPos;
public Vector3 Accel = new Vector3(0, 0, 0);
}
However, there are two problems with the line. The first is that it 'bounces' heavily when it's first started, and the second is that while it -almost- works, I can't seem to get the last segment to flow like the rest. It attaches to the target, but it looks stiff while the remainder of the fishing line moves correctly. How can I fix these issues?
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Line : MonoBehaviour { public LineRenderer lineRenderer; LineParticle[] lineLength; public Transform targetObject; public float lineRest = 0.8f; public int lineSegmentCount = 30; private Transform tc; private void Awake() { lineRenderer = GetComponent