How can I access an int variable from another script?
Hi everyone,
I have a script Clock_Time_Final.cs that changes the public int time using a coroutine. Then I have a script rosstophermove2.cs that I need to access whatever value Clock_Time_Final.cs's int currently is.
Here's what I have for Clock_Time_Final.cs (which definitely is working on its own):
using UnityEngine;
using System.Collections;
public class Clock_Time_Final : MonoBehaviour {
public int time;
void Start () {
StartCoroutine(TimeItself());
}
IEnumerator TimeItself(){
time = 6;
yield return new WaitForSeconds (3);
time = 7;
yield return new WaitForSeconds (3);
time = 8;
}
}
Then for the script trying to access it:
using UnityEngine;
using System.Collections;
public class rosstophermove2 : MonoBehaviour {
public Transform target;
public float speed;
public int thetime;
public Transform clock;
void Start () {
Clock_Time_Final clockscript = clock.GetComponent<Clock_Time_Final> ();
clockscript.time = thetime;
}
void Update () {
if (thetime == 8){
//Everything below this is irrelevant right now :)
The game runs, there are no errors or anything. And I've drag and dropped all the correct transforms in the correct places... it's just that the rosstophermove2.cs script stays as 0 whilst the time int is definitely changing with Clock_Time_Final.cs.
Any ideas what I've done wrong?
Thanks very much, Aaron
Answer by Jessespike · Jan 27, 2016 at 08:44 AM
rosstophermove2.thetime is staying 0 because it's never assigned anywhere.
clockscript.time = thetime;
^This is setting time in the clockscript, which isn't doing much, since clockscript will change time in the coroutine. I think you meant:
void Update() {
thetime = clockscript.time;
if (thetime == 8) {
But then, why have two variables store the same value? Wouldn't it better to use one? I mean replace thetime with clockscript.time:
void Update () {
if (clockscript.time == 8) {
Thanks so much for responding. I'm sorry but I'm not sure I totally understood. Did you mean to change things like this?
public class rosstophermove2 : $$anonymous$$onoBehaviour {
public Transform target;
public float speed;
public Transform clock;
void Start () {
Clock_Time_Final clockscript = clock.GetComponent<Clock_Time_Final> ();
}
void Update () {
if (clockscript.time == 8) {
That seems to make sense to me but I'm getting the error "The name 'clockscript' does not exist in the current context" and I'm unsure how to state it before the Update function in this situation.
Apologies again for not understanding.
Yea, like that. There's just one other thing: Clock_Time_Final is declared in the Start function, that means the Update function doesnt know what it is, so move the delcaration outside of the function.:
Clock_Time_Final clockscript;
void Start () {
clockscript = clock.GetComponent<Clock_Time_Final> ();
}
void Update () {
if (clockscript.time == 8) {
Hahaaaa yes!!!! Thank you so much! Nice TARDIS by the way :) Cheers
Your answer
Follow this Question
Related Questions
Changing Variable Outside of the Script 0 Answers
Integer arrays not comparing properly. 3 Answers
How can you add a function to a variable. Such as string.ToUpper() ? 1 Answer
C# - Access the Same Variable in Two Scripts 1 Answer
How do I access a variable/class from a C# file in a JS file? 1 Answer