Howdy, I was (and still am) attempting to fix an ArgumentOutOfRangeException issue in my TopDownController script. My question would be where I went wrong, and how to patch it up.
It’s on line 56 apparently.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TopDownController : MonoBehaviour
{
public Rigidbody2D body;
public SpriteRenderer spriteRenderer;
public List<Sprite> nSprites;
public List<Sprite> neSprites;
public List<Sprite> seSprites;
public List<Sprite> sSprites;
public List<Sprite> eSprites;
public float walkSpeed;
public float frameRate;
float idleTime;
public Vector2 direction;
public bool doesPlayerPossess;
public bool playerInRange;
Vector2 offset;
public List<Sprite> selectedSprites = null;
// Start is called before the first frame update
void Start()
{
float offsetX = offset.x;
float offsetY = offset.y;
}
// Update is called once per frame
void Update()
{
direction = new Vector2(Input.GetAxis("Horizontal"), Input.GetAxis("Vertical")).normalized;
body.velocity = direction * walkSpeed;
HandleSpriteflip();
List<Sprite> directionSprites = GetSpriteDirection();
if(directionSprites != null)
{
//holding inputs
float playTime = Time.time - idleTime;
int frame = (int)((playTime * frameRate) % directionSprites.Count);
spriteRenderer.sprite = directionSprites[frame];
}
else
{
//holding no inputs
idleTime = Time.time;
}
}
void HandleSpriteflip()
{
if (!spriteRenderer.flipX && direction.x < 0)
{
spriteRenderer.flipX = true;
}
else if (spriteRenderer.flipX && direction.x > 0)
{
spriteRenderer.flipX = false;
}
}
public List<Sprite> GetSpriteDirection()
{
//north
if(direction.y > 0)
{
if(Mathf.Abs(direction.x) > 0) //east or west
{
selectedSprites = neSprites;
}
//neutral x value
else
{
selectedSprites = nSprites;
}
}
//south
else if(direction.y < 0)
{
if (Mathf.Abs(direction.x) > 0) //east or west
{
selectedSprites = seSprites;
}
//neutral x value
else
{
selectedSprites = sSprites;
}
}
//neutral
else
{
if(Mathf.Abs(direction.x) > 0)
{
selectedSprites = eSprites;
}
}
return selectedSprites;
}
void OnCollisionEnter2D(Collision2D col)
{
if (col.gameObject.CompareTag("Crate"))
{
playerInRange = true;
}
}
void OnCollisionExit2D(Collision2D col)
{
if (col.gameObject.CompareTag("Crate"))
{
playerInRange = false;
}
}
}