Sprites not moving until switched to the next one

Hey all,
I’m having a problem when switching sprites -
When the sprite changes, it stays in the same place until the next one, however I would want it to be continuous, like Stardew Valley.
Here is the example of the Stardew Valley animations:


And here is an example of my problem:

Does anybody know what could be causing this/What the solution is?

PlayerSprites.cs

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System;
using System.Threading;

public class PlayerSprites : MonoBehaviour
{
    public List<Sprite> Up;
    public List<Sprite> Down;
    public List<Sprite> Right;
    public List<Sprite> Left;
    public int interval = 0;
    public GameObject Player;
    public GameObject PlayerSpriteRenderer;
    private PlayerMove playerMove;
    private SpriteRenderer spriteRenderer;
    public int cSprite = 0;
    public int currentdir;

    private void Start()
    {
        playerMove = Player.GetComponent<PlayerMove>();
        spriteRenderer = PlayerSpriteRenderer.GetComponent<SpriteRenderer>();
        currentdir = playerMove.direction;
    }

    private void Update()
    {
        if (currentdir != playerMove.direction) {
            currentdir = playerMove.direction;
            interval = 0;
        }

        if (interval == 8) {
            interval = 0;
        }

        if (playerMove.direction == 1)
        {
            spriteRenderer.sprite = Left[interval];
            interval += 1;
            Thread.Sleep(150);
            cSprite = 3;
        }
        else if (playerMove.direction == 0)
        {
            spriteRenderer.sprite = Up[interval];
            interval += 1;
            Thread.Sleep(150);
            cSprite = 1;
        }
        else if (playerMove.direction == 2)
        {
            spriteRenderer.sprite = Right[interval];
            interval += 1;
            Thread.Sleep(150);
            cSprite = 2;
        }
        else if (playerMove.direction == 3)
        {
            spriteRenderer.sprite = Down[interval];
            interval += 1;
            Thread.Sleep(150);
            cSprite = 0;
        }
        else
        {
            if (cSprite == 0) {
                spriteRenderer.sprite = Down[0];
            }
            else if (cSprite == 1) {
                spriteRenderer.sprite = Up[0];
            }
            else if (cSprite == 2) {
                spriteRenderer.sprite = Right[0];
            }
            else if (cSprite == 3) {
                spriteRenderer.sprite = Left[0];
            }
        }
    }
}

PlayerMove.cs

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class PlayerMove : MonoBehaviour
{
    public float speed;
    public Vector3 move;
    public int direction = 4;


    private void Update()
    {

        if (Input.GetKey(KeyCode.A))
        {
            move = new Vector3(-speed * Time.deltaTime, 0, 0);
            direction = 1;
        }
        else if (Input.GetKey(KeyCode.W))
        {
            move = new Vector3(0, speed * Time.deltaTime, 0);
            direction = 0;
        }
        else if (Input.GetKey(KeyCode.D))
        {
            move = new Vector3(speed * Time.deltaTime, 0, 0);
            direction = 2;
        }
        else if (Input.GetKey(KeyCode.S))
        {
            move = new Vector3(0, -speed * Time.deltaTime, 0);
            direction = 3;
        }
        else
        {
            move = new Vector3(0, 0, 0);
            direction = 4;
        }

        transform.position += move;
    }
}

Sounds like you wrote a bug… and that means… time to start debugging!

By debugging you can find out exactly what your program is doing so you can fix it.

Use the above techniques to get the information you need in order to reason about what the problem is.

You can also use Debug.Log(...); statements to find out if any of your code is even running. Don’t assume it is.

Once you understand what the problem is, you may begin to reason about a solution to the problem.

When you call Thread.Sleep(150) it causes Unity to freeze because all scripts work on the same thread.

Instead you can rename your Update method to something like Animate and then Invoke it. Something like this:

    void Start()
    {
        InvokeRepeating("Animate",0,0.015f);
    }

    void Animate()
    {
        // Do animation stuff here
    }