Here is the code:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour
{
private CharacterController controller;
private Vector3 direction;
public float forwardSpeed;
private int desiredLane = 1;//0:left 1:middle 2:right
public float laneDistance = 4;// distance beetween two lanes
public float JumpForce;
public float Gravity = -20;
void Start()
{
controller = GetComponent<CharacterController>();
}
private void Jump()
{
direction.y = JumpForce;
}
// Update is called once per frame
void Update()
{
direction.z = forwardSpeed; {}
//Gather the imputs on which lane we should be
if(Input.GetKeyDown(KeyCode.RightArrow))
{
desiredLane++;
if(desiredLane==3)
desiredLane = 2;
}
if(Input.GetKeyDown(KeyCode.LeftArrow))
{
desiredLane--;
if(desiredLane == -1)
desiredLane = 0;
}
//Calculate where we should be on the future
Vector3 targetPosition = transform.position.z * transform.forward + transform.position.y * transform.up;
if (desiredLane ==0)
{
targetPosition += Vector3.left * laneDistance;
}else if (desiredLane ==2)
{
targetPosition += Vector3.right * laneDistance;
}
transform.position = Vector3.Lerp(transform.position, targetPosition,50 * Time.fixedDeltaTime);
if(controller.isGrounded)
{
if(Input.GetKeyDown(KeyCode.UpArrow))
{
Jump();
}
}
else
{
direction.y += Gravity * Time.deltaTime;
}
}
private void FixedUpdate()
{
controller.Move(direction*Time.fixedDeltaTime);
}
}