Good day!
I’m having a problem with a simple lerp effect for dashing the character to left/right.
Here is my code:
using UnityEngine;
using System.Collections;
public class ChangeLane : MonoBehaviour {
public bool toChangeLane;
public float changeLaneDuration;
public bool isChangingLane, toLeft, toRight;
public GameObject leftLaner, rightLaner;
public CharacterController dogCtrl;
void Awake()
{
dogCtrl = GetComponent<CharacterController>();
}
void Update()
{
if(toChangeLane)
{
if(isChangingLane)
{
toChangeLane = false;
}
else
{
StartCoroutine(ChangeDogLane());
toChangeLane = false;
}
}
}
IEnumerator ChangeDogLane()
{
float timer = 0.0f;
float newX = 0.0f;
Vector3 targetPosition = new Vector3(0f, 0f, 0f);
isChangingLane = true;
float distance = 0.0f, speed = 0.0f, direction = 0.0f;
if(toLeft)
{
targetPosition = leftLaner.transform.position;
direction = -1.0f;
}
else if(toRight)
{
targetPosition = rightLaner.transform.position;
direction = 1.0f;
}
Debug.Log("Dog started changing lane.");
speed = 3f/ changeLaneDuration; // distance between lanes
while(isChangingLane)
{
timer += Time.deltaTime;
dogCtrl.Move(new Vector3(direction * speed * Time.deltaTime, 0f, 0f));
if(timer >= changeLaneDuration)
{
isChangingLane = false;
}
yield return null;
}
}
}
What happens is the character’s last position is not exactly the distance from position before the lane change. Can someone help me with this? ![]()