- Home /
Question by
Poi7ioN · Apr 19, 2019 at 04:36 PM ·
listsscene-changeargumentoutofrangeexception
Need some help with list and reusing the list in next scene
**Script 1 GameStatus.cs**
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro;
public class GameStatus : MonoBehaviour
{
[SerializeField] public List<GameObject> LifeDisplay;
[SerializeField] public List<GameObject> generatePower; // life power prefab goes here
LoseCollider LoseCollider;
public GameObject LifePrefab;
static public int countlives;
public float PowerTimer;
private void Awake()
{
int CountNoObjects = FindObjectsOfType<GameStatus>().Length;
if (CountNoObjects > 1)
{
DestroyAndRestItself();
}
else
{
DontDestroyOnLoad(gameObject);
}
}
public void DestroyAndRestItself()
{
Destroy(gameObject);
}
private void Start()
{
scoreText.text = currentScore.ToString();
SceneLoader = FindObjectOfType<SceneLoader>();
LoseCollider = FindObjectOfType<LoseCollider>();
gameLevel = FindObjectOfType<GameLevel>();
}
// Update is called once per frame
void Update()
{
Time.timeScale = gamespeed;
gameLevel.DisplayLevel();
countlives = LifeDisplay.Count;
PowerTimer += Time.deltaTime;
if (PowerTimer > 20f)
{
GeneratePowerup();
}
if(PowerTimer > 12f)
{
PowerDestroy();
}
}
public void GeneratePowerup()
{
GameObject pow = Instantiate(generatePower[UnityEngine.Random.Range(0, generatePower.Count)],
new Vector3(Random.Range(1f,15f),Random.Range(8f,11f),0f),transform.rotation);
PowerTimer = 0;
}
public void PowerDestroy()
{
Destroy(GameObject.FindGameObjectWithTag("SlowPower"));
Destroy(GameObject.FindGameObjectWithTag("FastPower"));
Destroy(GameObject.FindGameObjectWithTag("ShootingPower"));
Destroy(GameObject.FindGameObjectWithTag("Life"));
}
public void GetLifePrefab()
{
LifeDisplay.Add(LifePrefab);
DontDestroyOnLoad(Instantiate(LifePrefab, new Vector3(xValueoflife, yValueoflife, 0f), Quaternion.identity)); // here when object is of tag lifeprefab it gets added to list and life object is instantiated at the top right
xValueoflife = xValueoflife + 0.42f;
}
}
** Here in script second LoseCollider.cs**
private void Update()
{
lifePower = GameStatus.countlives; // counting list size
}
public void OnTriggerEnter2D(Collider2D collision)
{
if (collision.gameObject.tag.Equals("NormalBall") == true)
{
if(lifePower == 0)
{
collision.GetComponent<Collider2D>().isTrigger = true;
gameStatus = FindObjectOfType<GameStatus>();
gameStatus.ChangePosition();
DestroyLevel();
}
else
{
Instantiate(ball, new Vector3(paddle.transform.position.x, 0.7483f, 0), Quaternion.identity);
for (var i= lifePower-1; i < lifePower; i++)
{
gameStatus.LifeDisplay.RemoveAt(i); // this is where the problem occurs lifepower count gets updated but the object from list wont remove.
}
lifePower--;
}
}
else
{
collision.GetComponent<Collider2D>().isTrigger = false;
}
}
ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index ** This error pops up in scene 2 , whereas in first scene it works fine. Please can some one take a look at it much appreciated. :)
Comment
Your answer
Follow this Question
Related Questions
Assign role randomly from array 2 Answers
Unable to completely clear a list 2 Answers
Trouble Using a Static List 0 Answers
Lists are empty when they aren't supposed to be 2 Answers
Argument out of Range Exception Error - Parameter Name: Index 1 Answer