Improve my rotate sprite change code

Hi, I make script to show rotate sprite of my snake but I think it can be better but I don’t know how improve code. I am know code is terrible :/.
If player change direction in Snake class:

void ChangeMoveDirection()
    {
        if ((Input.GetKeyDown(KeyCode.UpArrow) || Input.GetKeyDown(KeyCode.W)) && MoveDirectionEnum != MoveDirection.down && MoveDirectionEnum != MoveDirection.up)
        {
            MoveDirectionEnum = MoveDirection.up;
            roadTurn.Add(gameObject.transform.position);
            actualGround.GetComponent<Node>().turnDirection = MoveDirectionEnum;
            actualGround.GetComponent<Node>().isTurnNode = true;
            SetSprite();
            isPossibleChangeDirection = false;
        }

Others if’s look similar.

Now when player move one node forward in other snake parts run method Move:
If body part is in position where snake change direction (Method IsTurnPosition return true) then will show correct rotate sprite.

Body class
snakeBodyIndex is index this body (GameObject) from array in Snake class with all body.

public void Move(int snakeBodyIndex)
    {  
        previousPosition = gameObject.transform.position;

        if (snakeBodyIndex > 0 && snakeBodyIndex < 2)
        {
            targetPosition = snake.snakeBody[snakeBodyIndex-1].GetComponent<Body>().previousPosition;

            transform.position = targetPosition;
           
            if (IsTurnPosition(gameObject.transform.position))
            {
                SetTurnSprite(snake.snakeBody[snakeBodyIndex-1].GetComponent<Body>().transform.position, snake.snakeTail.transform.position);
            }
            else SetSprite(snake.snakeBody[snakeBodyIndex-1].GetComponent<Body>().transform.position);
        }
        else if (snakeBodyIndex >= 2)
        {
            targetPosition = snake.snakeBody[snakeBodyIndex-1].GetComponent<Body>().previousPosition;

            transform.position = targetPosition;

            if (IsTurnPosition(gameObject.transform.position))
            {
                SetTurnSprite(snake.snakeBody[snakeBodyIndex-1].GetComponent<Body>().transform.position, snake.snakeBody[snakeBodyIndex-1].GetComponent<Body>().transform.position);
            }
            else SetSprite(snake.snakeBody[snakeBodyIndex-1].GetComponent<Body>().transform.position);          
        }
        else
        {
            targetPosition = snake.previousPosition;
           
            transform.position = targetPosition;

            if (IsTurnPosition(gameObject.transform.position))
            {
                SetTurnSprite(snake.transform.position, snake.snakeTail.transform.position);
            }
            else SetSprite(snake.transform.position);

        }

        
    }
    void SetTurnSprite(Vector2 targetPosition, Vector2 previousBodyPosition)
    {

        foreach (var item in GameObject.FindGameObjectsWithTag("Ground"))
        {
            if (item.transform.position == gameObject.transform.position)
            {
                actualGround = item;
                break;
            }
        }

        if (actualGround.GetComponent<Node>().turnDirection == Snake.MoveDirection.down)
        {
            if (previousPosition.x < gameObject.transform.position.x) spriteRenderer.sprite = bodySprites[0];
            else spriteRenderer.sprite = bodySprites[1];
        }

        if (actualGround.GetComponent<Node>().turnDirection == Snake.MoveDirection.left)
        {
            if (previousPosition.y < gameObject.transform.position.y) spriteRenderer.sprite = bodySprites[0];
            else spriteRenderer.sprite = bodySprites[4];
        }

        if (actualGround.GetComponent<Node>().turnDirection == Snake.MoveDirection.right)
        {
            if (previousPosition.y < gameObject.transform.position.y) spriteRenderer.sprite = bodySprites[1];
            else spriteRenderer.sprite = bodySprites[3];
        }

        if (actualGround.GetComponent<Node>().turnDirection == Snake.MoveDirection.up)
        {
            if (previousPosition.x < gameObject.transform.position.x) spriteRenderer.sprite = bodySprites[4];
            else spriteRenderer.sprite = bodySprites[3];
        }

    }
    bool IsTurnPosition(Vector2 bodyPosition)
    {
        for (int i = 0; i < snake.roadTurn.Count; i++)
        {
            if (snake.roadTurn[i] == bodyPosition) return true;
        }

        return false;
    }

Anyone help?

Nobody here (except for perhaps the comp-sci majors) is super-interested in “improving code” in a general case.

Either the code works, at which point you ship it, or it doesn’t, at which point you fix it.

“Improving it” isn’t a good use of time for anyone, and you’re likely to damage or break it too.

If you’re new, the ONLY way you will ever learn how to fix code is to feel the pain of poorly-written code and then learn the terminology to describe the failings of that code, and then learn how to refactor the code to make it less painful to use.

If you have a specific problem with your code, here is how to report your problem productively in the Unity3D forums:

http://plbm.com/?p=220