Problem with changing lanes with CharacterController

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? :frowning:

I’m gonna go and take a guess here, but I think the dog does not move at all, am I right?

Nope. The dog is actually moving to the right/left as I enable start the ChangeLane. The problem is the x-axis’ last value is not exact resulting the dog not centered in the new lane. Though I know I can snap the transform to the exact position, when the x-value have a large excess value, it also makes the camera snaps significantly.