Get positions at equal intervals between two Vector3


I want to divide lineRenderer to some n parts and get vector3 positions between start position and and position. Right now I’m trying to use Vector3.Lerp for it in a for loop, but cant get the last value of lerp function right. Any help?

var ray2 = Camera.main.ScreenPointToRay (Input.mousePosition);
var layerBuildMask2  = 1 << 21;	
var layerCritMask2  = 1 << 22;
var combinedLayer2 = layerBuildMask2 | layerCritMask2;
var lineRenderer : LineRenderer = gameObject.GetComponent("LineRenderer");
var linePos : int = 16;
if (Physics.Raycast (ray, hit, Mathf.Infinity, combinedLayer))
	var distance=Vector3.Distance(selectedBuilding.transform.position,hit.transform.position);

	   for(s = 0 ; s<linePos ; s++)
		lineRenderer.SetPosition(s, Vector3.Lerp(hit.transform.position,selectedBuilding.transform.position,distance/s));


Lerp expects a 0-1 percent as the last input, so just give it 0/15, 1/15, 2/15 … 15/15. I think the confusion is that most people don’t have a 0-1, so have to do math to force it. You’re using lerp for the exact thing it was meant to do:

for(int s=0;s<linePos;s++) {
  ... lerp(start, stop, s/(linePos-1)) ...
  // EX: when s=5, you get 5/15ths, so the point is 1/3rd of the way over

The extra “-1” is because you want to start at 0/15ths and end at 15/15ths (equals 100%.) That’s a total of 16 points.

Divide by zero may be killing the rest of the for loop, and “distance/s” wrong.

Try this:

var targetPos : Vector3 = selectedBuilding.transform.position;
Debug.Log (targetPos);
var clickPos : Vector3 = hit.transform.position;
Debug.Log (clickPos);
for (var s : int = 1; s < linePos; s++)
    var percentage : float = s/linePos;
    var splitPos : Vector3 = Vector3.Lerp(clickPos,targetPos),percentage);
    lineRenderer.SetPosition(s, splitPos);

The last value of Vector3.Lerp() smoothing. The higher its value the faster the object will interpolate to the given position. Use “0” for maximum smoothing and “1” for minimum smoothing.