private IEnumerator AnimateGrapple(Vector2 targetPosition) { lineRenderer.positionCount = 2; Vector3[] positions = new Vector3[2]; float animateTime = 0.15f; float timer = animateTime; float step = 0; while (timer > 0) { step += Time.deltaTime / animateTime; positions[0] = this.transform.localPosition; Vector3 localPosition = transform.TransformPoint(positions[1]); positions[1] = transform.InverseTransformPoint(Vector2.MoveTowards(localPosition, targetPosition, step)); lineRenderer.SetPositions(positions); timer -= Time.deltaTime; yield return(null); } Vector2 start = this.transform.position; Vector2 vel = calcInitalVelocity(start, targetPosition, animateTime); controllerData.InvokeMovePlayerGrapple(vel); while (controllerData.onCeiling == false) { positions[0] = this.transform.localPosition; positions[1] = transform.InverseTransformPoint(targetPosition); lineRenderer.SetPositions(positions); yield return(null); } lineRenderer.positionCount = 0; }