Auf die Variable in einem anderen Skript kann nicht zugegriffen werden
Posted: 24 Dec 2024, 20:04
Ich habe diese Klasse an ein PauseButton-Objekt angehängt.
Dann habe ich eine andere Klasse, die versucht, auf die Variable firstTimePause auf PauseButton zuzugreifen
Warum erhalte ich für die Variable firstTimePause immer False, obwohl ich durch ein Debug.Log überprüft habe, ob sie auf True gesetzt ist
Wenn ich die Klasse so geändert habe, funktioniert sie.
Das bedeutet, dass mit der Anweisung this.gameObject.name == "ResumeBackground" && checkIfPause == true etwas nicht stimmt. Aber da in beiden Szenarien „Dies wird gedruckt“ ausgegeben wird, bin ich verwirrt, warum es nicht wie erwartet funktioniert.
Dies ist SomeObject mit GameManager

Code: Select all
public class PauseButton : MonoBehaviour
{
public bool firstTimePause;
private bool checkIfPause;
public void Awake()
{
firstTimePause = false;
}
public virtual void PauseButtonAction()
{
StartCoroutine(PauseButtonCo());
}
protected virtual IEnumerator PauseButtonCo()
{
yield return null;
checkIfPause = GameObject.Find("SomeObject").GetComponent().Paused;
if (firstTimePause == false && this.gameObject.name == "ResumeBackground" && checkIfPause == true)
{
firstTimePause = true;
Debug.Log("This is getting printed");
}
}
}
Code: Select all
public class StopWatchTimer : MonoBehaviour
{
public Text textTime;
private PauseButton pauseButtonScript;
public GameObject pauseButtonObject;
// Use this for initialization
void Start()
{
pauseButtonScript = pauseButtonObject.GetComponent
();
}
void Update()
{
pauseButtonScript = pauseButtonObject.GetComponent();
Debug.Log(pauseButtonScript.firstTimePause); //this value is always false even if it was already set to true on PauseButton Class
if (pauseButtonScript.firstTimePause == true)
{
//do something
}
}
}
Wenn ich die Klasse so geändert habe, funktioniert sie.
Code: Select all
public class PauseButton : MonoBehaviour
{
public bool firstTimePause;
private bool checkIfPause;
public void Awake()
{
firstTimePause = false;
}
public virtual void PauseButtonAction()
{
StartCoroutine(PauseButtonCo());
}
protected virtual IEnumerator PauseButtonCo()
{
yield return null;
checkIfPause = GameObject.Find("SomeObject").GetComponent().Paused;
firstTimePause = true;
Debug.Log("This is getting printed");
}
}
Dies ist SomeObject mit GameManager
