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;
}
}