- Home /
How would I access my list from another function?
I'm trying to make a cannon that has a conveyor like list where it moves the first variable of my script puts it on the back, then puts the 2d one in first place but my problem is I can't access my list in another function and there are no questions on unity answers or on stack overflow that allude to the answer that I could find. Could you help me please?
 using UnityEngine;
 using System.Collections;
 using System.Collections.Generic;
 
 public class CannonScript : MonoBehaviour
 {
     bool fired;
     float previousTime;
     public GameObject
         projectile,     //  The cannonball
         target,         //  The cube that the cannon points at
         cannonBallPos;  //  The spawn position of the cannon ball
     public float
         waitTime = 1,   //  Time between shots
         forceAmount = 1000;
 
     void Start()
     {
         previousTime = Time.timeSinceLevelLoad;
          var Cannons = new List<GameObject>(GameObject.FindGameObjectsWithTag("Cannon"));
         transform.localScale = new Vector3(1, 1, 2);
         cannonBallPos = Cannons[1];
         cannonBallPos = new GameObject("cannonBallPos");    //  Creates a new game object
         cannonBallPos.transform.parent = transform; //  Sets the parent as the cannon
         cannonBallPos.transform.position = transform.position + new Vector3(0, 0, 0.5f); //  Moves to the front of the cannon
 
     }
 
         void Update()
     {
        
 
         transform.LookAt(target.transform);
             if (Time.timeSinceLevelLoad - previousTime > waitTime)
             
                  previousTime = Time.timeSinceLevelLoad;
                 Fire();
             
         }
 
         void Fire()
     {
             GameObject cannonBall;
             cannonBall = (GameObject)Instantiate(projectile, cannonBallPos.transform.position, cannonBallPos.transform.rotation);
             cannonBall.GetComponent<Rigidbody>().AddForce(transform.forward * forceAmount);
         
        }
     }
Answer by Necromunger · Jan 08, 2017 at 05:54 AM
At the top of your class add a new public variable.
 public List<GameObject> Cannons = new List<GameObject>();
In your start method, init your list and then use it the same way.
  void Start()
  {
      previousTime = Time.timeSinceLevelLoad;
      Cannons = new List<GameObject>(GameObject.FindGameObjectsWithTag("Cannon"));
      transform.localScale = new Vector3(1, 1, 2);
      cannonBallPos = Cannons[1];
      cannonBallPos = new GameObject("cannonBallPos");
      cannonBallPos.transform.parent = transform;
      cannonBallPos.transform.position = transform.position + new Vector3(0, 0, 0.5f);
  }
Then when you want to access the list of cannons from another script you make a reference to this one and access its Cannons member.
 public CannonScript cannonScript;
  void Start()
  {
       If (cannonScript != null) {
            //cannonScript.Cannons
       }
  }
Either use unity's UI to drag the script reference or find the GameObject with the CannonScript attached on Start()
Your answer
 
 
             Follow this Question
Related Questions
instantiating unique classes of a type 0 Answers
I need some help with my high score.,I need help with my highsore. 1 Answer
Multiple Cars not working 1 Answer
"Only assignment, call, increment, decrement and new object expressions can be used as statements" 1 Answer
error CS1525: unexpected symbol. How do I fix this and why am I getting this error? 1 Answer
 koobas.hobune.stream
koobas.hobune.stream 
                       
                
                       
			     
			 
                