- 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