- Home /
Question by
kareembuckley1 · Jan 28, 2021 at 04:28 PM ·
c#unity 5
Why does my Lerp only run once?
aside from a small while loop crash error. my main issue is my lerp/slerp only being called once resulting in it only going half the distance.
public class Procedural : MonoBehaviour
{
public Transform[] newTargetPos;
public Transform[] originalTargetPos;
public float dist, stepDist, stepSpeed, raySphereSize, stepHeight;
public bool needToStep;
public float delta = 0.001f;
// For Step Slurp
//############################
float startTime;
Vector3 centrePoint;
Vector3 startRelCenter;
Vector3 endRelCenter;
//############################
// Start is called before the first frame update
void Start()
{
needToStep = false;
}
// Update is called once per frame
void Update()
{
}
void LateUpdate()
{
var dir = new Vector3(0,-1,0);
for (int i = 0; i < newTargetPos.Length; i++)
{
//dir = Vector3(0,-1,0);
//Version 1
//Ray ray = new Ray(newTargetPos[i].position, dir);
//Version 2
Ray ray = new Ray(newTargetPos[i].position + (Vector3.up * 3), dir);
RaycastHit hitInfo;
// can set max distance of ray by (ray, out hitinfor, 100)
if (Physics.Raycast(ray, out hitInfo))
{
Debug.DrawLine(ray.origin, hitInfo.point, Color.red);
//Gizmos.DrawWireSphere(newTargetPos[0].position + dir * stepHeight, raySphereSize);
//Handles step distance
stepDist = Vector3.Distance(originalTargetPos[0].position, newTargetPos[0].position);
// Debug.Log(stepDist);
newTargetPos[0].position = hitInfo.point;
if(stepDist >= 5.5f)
{
StartCoroutine(Step());
needToStep = true;
Debug.Log(needToStep);
}
}
else
{
Debug.DrawLine(ray.origin, ray.origin + ray.direction * 10, Color.green);
}
}
}
private IEnumerator Step()
{
Debug.Log("Step begin");
//needToStep = true ;
while (needToStep)
originalTargetPos[0].position = Vector3.Lerp(originalTargetPos[0].position, newTargetPos[0].position, stepSpeed);
//
//GetCenter(Vector3.up);
//float fracComplete = (Time.time - startTime) / lerpSpeed * stepSpeed;
//originalTargetPos[0].position = Vector3.Slerp(startRelCenter, endRelCenter, fracComplete);
//originalTargetPos[0].position += centrePoint;
yield return new WaitForSeconds(0.1f);
if ((originalTargetPos[0].position - newTargetPos[0].position).sqrMagnitude < delta * delta)
needToStep = false;
Debug.Log("Step End");
}
// ################ For step Slerp ##############################
public void GetCenter(Vector3 direction)
{
centrePoint = (originalTargetPos[0].position + newTargetPos[0].position) * 0.5f;
centrePoint -= direction;
startRelCenter = originalTargetPos[0].position - centrePoint;
endRelCenter = newTargetPos[0].position - centrePoint;
}
//###############################################################
}
Comment
Your answer
Follow this Question
Related Questions
Multiple Cars not working 1 Answer
Distribute terrain in zones 3 Answers
How can I access the ^ key with qwertz keyboard-layout 2 Answers
How to Spawn after checking if the clones are destroyed. 1 Answer
Monster AI patrol an idle 0 Answers