Help with list.

I am making an idle 2d game, and my code stop working in the part whem i try to add a GameObject on a list.

Code:

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

public class FollowersDB : MonoBehaviour {
  
    public Manager main;
    public List<GameObject> followers;
    public GameObject followerPrefab;
    public int army;
    public bool load=false;
    int i=0;
    public float[,] data = new float[6, 4];
    public int idlle;
    public bool active=false;
    public Transform thisObj;

    // Use this for initialization
    void Start () {
        followers=new List<GameObject>();
        if (followers == null) {
            Debug.Log ("HA");
        }
        thisObj = GameObject.FindWithTag ("CharTab").transform;
        main = GameObject.FindWithTag ("manager").GetComponent<Manager> ();
        LS (2);
        foreach (GameObject obb in followers) {
            if (obb.GetComponent<Follower> ().lv != 0) {
                idlle = idlle + obb.GetComponent<Follower> ().DMG;
            } else {
                idlle = idlle + 0;
            }
        }
        main.idle = idlle;
        idlle = 0;
    }

  
    // Update is called once per frame
    void Update () {
        foreach (GameObject obb in followers) {
            if (obb.GetComponent<Follower> ().lv != 0) {
                idlle = idlle + obb.GetComponent<Follower> ().DMG;
            } else {
                idlle = idlle + 0;
            }
        }
        main.idle = idlle;
        idlle = 0;

      
        data [0, 0] = followers [0].GetComponent<Follower> ().DMG;
        data [0, 1] = followers [0].GetComponent<Follower> ().lv;
        data [0, 2] = followers [0].GetComponent<Follower> ().mult;
        data [0, 3] = followers [0].GetComponent<Follower> ().lvCost;
        data [1, 0] = followers [1].GetComponent<Follower> ().DMG;
        data [1, 1] = followers [1].GetComponent<Follower> ().lv;
        data [1, 2] = followers [1].GetComponent<Follower> ().mult;
        data [1, 3] = followers [1].GetComponent<Follower> ().lvCost;
        data [2, 0] = followers [2].GetComponent<Follower> ().DMG;
        data [2, 1] = followers [2].GetComponent<Follower> ().lv;
        data [2, 2] = followers [2].GetComponent<Follower> ().mult;
        data [2, 3] = followers [2].GetComponent<Follower> ().lvCost;
        data [3, 0] = followers [3].GetComponent<Follower> ().DMG;
        data [3, 1] = followers [3].GetComponent<Follower> ().lv;
        data [3, 2] = followers [3].GetComponent<Follower> ().mult;
        data [3, 3] = followers [3].GetComponent<Follower> ().lvCost;
        data [4, 0] = followers [4].GetComponent<Follower> ().DMG;
        data [4, 1] = followers [4].GetComponent<Follower> ().lv;
        data [4, 2] = followers [4].GetComponent<Follower> ().mult;
        data [4, 3] = followers [4].GetComponent<Follower> ().lvCost;
        data [5, 0] = followers [5].GetComponent<Follower> ().DMG;
        data [5, 1] = followers [5].GetComponent<Follower> ().lv;
        data [5, 2] = followers [5].GetComponent<Follower> ().mult;
        data [5, 3] = followers [5].GetComponent<Follower> ().lvCost;
        if (active == true) {
            thisObj.localPosition = new Vector3 (0, 0, 0);
        } else {
            thisObj.localPosition = new Vector3 (1000, 1000, 0);
        }
    }
    public void LS(int opt){
        SaveLoad sl = GameObject.FindWithTag("manager").GetComponent<SaveLoad>();
        if (opt == 1) {
            sl.Save ();
            Debug.Log (data[0,0]);
            opt = 0;
        } else if (opt == 2) {
            sl.Load ();
            if (load == true) {
                Debug.Log ("loaded");
                GameObject o = Instantiate (followerPrefab, new Vector3 (0, 286f, 0), Quaternion.identity)as GameObject;
                Follower f0 = o.AddComponent<Follower> ();
                f0.Name = "Ajudante 1";
                f0.DMG = (int)data [0, 0];
                f0.lv = data [0, 1];
                f0.mult = data [0, 2];
                f0.lvCost = data [0, 3];
                followers.Add (o);//NullReferenceException: Object reference not set to an instance of an object


                GameObject o1 = Instantiate (followerPrefab, new Vector3 (0, 50f, 0), Quaternion.identity)as GameObject;
                Follower f1 = o1.AddComponent<Follower> ();
                f1.Name = "Ajudante 2";
                f1.DMG = (int)data [1, 0];
                f1.lv = data [1, 1];
                f1.mult = data [1, 2];
                f1.lvCost = data [1, 3];
                followers.Add (o1);//NullReferenceException: Object reference not set to an instance of an object


                GameObject o2 = Instantiate (followerPrefab, new Vector3 (0,-186f, 0), Quaternion.identity)as GameObject;
                Follower f2 = o2.AddComponent<Follower> ();
                f2.Name = "Ajudante 3";
                f2.DMG = (int)data [2, 0];
                f2.lv = data [2, 1];
                f2.mult = data [2, 2];
                f2.lvCost = data [2, 3];
                followers.Add (o2);//NullReferenceException: Object reference not set to an instance of an object

                load = false;
            } else if(load==false){
                followers = null;
                GameObject o = Instantiate (followerPrefab, new Vector3 (0, 154.55f, 0), Quaternion.identity)as GameObject;
                Follower f0 = o.AddComponent<Follower> ();
                f0.Name = "Ajudante 1";
                f0.DMG = 2;
                f0.lv = 0;
                f0.mult = 1.5f;
                f0.lvCost = 10;
                Debug.Log ("Adding");
                followers.Add (o);//NullReferenceException: Object reference not set to an instance of an object


                GameObject o1 = Instantiate (followerPrefab, new Vector3 (0, 0, 0), Quaternion.identity)as GameObject;
                Follower f1 = o1.AddComponent<Follower> ();
                f1.Name = "Ajudante 2";
                f1.DMG = 4;
                f1.lv = 0;
                f1.mult = 1.5f;
                f1.lvCost = 100;
                followers.Add (o1);//NullReferenceException: Object reference not set to an instance of an object


                GameObject o2 = Instantiate (followerPrefab, new Vector3 (0, -154.55f, 0), Quaternion.identity)as GameObject;
                Follower f2 = o2.AddComponent<Follower> ();
                f2.Name = "Ajudante 3";
                f2.DMG = 10;
                f2.lv = 0;
                f2.mult = 1.5f;
                f2.lvCost = 500;
                followers.Add (o2);//NullReferenceException: Object reference not set to an instance of an object

                GameObject o3 = Instantiate (followerPrefab, new Vector3 (0, -154.55f, 0), Quaternion.identity)as GameObject;
                Follower f3 = o3.AddComponent<Follower> ();
                f3.Name = "Ajudante 4";
                f3.DMG = 200;
                f3.lv = 0;
                f3.mult = 1.5f;
                f3.lvCost = 500;
                followers.Add (o3);//NullReferenceException: Object reference not set to an instance of an object

                GameObject o4 = Instantiate (followerPrefab, new Vector3 (0, -154.55f, 0), Quaternion.identity)as GameObject;
                Follower f4 = o4.AddComponent<Follower> ();
                f4.Name = "Ajudante 5";
                f4.DMG = 1000;
                f4.lv = 0;
                f4.mult = 1.5f;
                f4.lvCost = 500;
                followers.Add (o4);//NullReferenceException: Object reference not set to an instance of an object

                GameObject o5 = Instantiate (followerPrefab, new Vector3 (0, -154.55f, 0), Quaternion.identity)as GameObject;
                Follower f5 = o5.AddComponent<Follower> ();
                f5.Name = "Ajudante 6";
                f5.DMG = 10000;
                f5.lv = 0;
                f5.mult = 1.5f;
                f5.lvCost = 500;
                followers.Add (o5);//NullReferenceException: Object reference not set to an instance of an object
            }
            if (followers != null) {
                foreach (GameObject obj in followers) {
                    obj.transform.SetParent (GameObject.FindWithTag ("followerPan").transform, false);
                }
            }
            opt = 0;
        }
    }
    public void CharMenu(){
        if (active == true) {
            active = false;
        } else {
            active = true;
        }
    }
}

You set followers to null at

  • else if(load==false){
  • followers = null;
1 Like

hello Kley,
Can I get you to try a more simple Add? try this just to see if it will add it. it should.
followers.Add (followerPrefab);

GameObject o = Instantiate (followerPrefab, new Vector3 (0, 286f, 0), Quaternion.identity)as GameObject;  //this looks good
Follower f0 = o.AddComponent<Follower> (); //this looks bad.  not sure why you're creating f0 object and never using it.
f0.Name = "Ajudante 1";  //setting data that doesn't get used
f0.DMG = (int)data [0, 0];  //setting data that doesn't get used
f0.lv = data [0, 1];  //setting data that doesn't get used
f0.mult = data [0, 2];  //setting data that doesn't get used
f0.lvCost = data [0, 3];  //setting data that doesn't get used
followers.Add (o); // this should still work, it doen't care about f0


GameObject o = Instantiate (followerPrefab, new Vector3 (0, 286f, 0), Quaternion.identity)as GameObject;  //this looks good
Debug.Log(o.name); // this should print out the name IE: followerPrefab(clone)
o.AddComponent<Follower> (); //ad the script to the new object
Follower f0 = o.GetComponent<Follower> ();  //access to the sctipt
f0.Name = "Ajudante 1"; // set data
f0.DMG = (int)data [0, 0]; // set data
f0.lv = data [0, 1]; // set data
f0.mult = data [0, 2]; // set data
f0.lvCost = data [0, 3]; // set data
followers.Add (o); //this should work, it doen't care about f0

Thanks, I’m ashamed to make such mistakes …