How can I access variables in another scene?
Let say I have 2 scenes, scene1 and scene2.
In Scene2, I have a GameObject called “TypeBox” with “boxo” tag.
I attached the script below (called “TypeChecker.cs”) into “TypeBox”.
Meanwhile in scene1, I have a GameObject called “enemy1” and attached the script below (called “SpawnCheck.cs”) into it. I want to transfer the boolean variable win and lose from scene2 (TypeChecker) into scene1 (SpawnCheck).
The unity keeps showing errors:
NullReferenceException: Object reference not set to an instance of an object
SpawnCheck.Start () (at Assets/SpawnCheck.cs:18)
How can I fix that? Thank you…
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
public class TypeChecker : MonoBehaviour {
private static string[] kamus = new string[] {"dosen","mandi","kuliah","sakit","absen","tidur","pingsan","belajar","tugas","lambat","alasan"};
private static string[] kamus2 = new string[] {"oesnd","dinam","iahluk","kitas","senab","ditur","nigspan","jaraleb","gutas","bmtaal","aaansl"};
private static int[] cek = new int[] {0,0,0,0,0,0,0,0,0,0};
public static int a;
private string type = kamus[a];
private string type2 = kamus2[a];
private string typeStr = string.Empty;
private int temp;
private int cekcek = 0;
private Rect windowRect = new Rect(0,0,Screen.width, Screen.height);
public GUIStyle typestyle;
public GUIStyle typestyle2;
public GUIStyle typestyle3;
public GUIStyle typestyle4;
public GUIStyle typestyle5;
public GUIStyle typestyle6;
public GameObject enemy2;
public GameObject chara;
public int startingHealth = 100; // The amount of health the player starts the game with.
public int currentHealth;
public int currentHealthEnemy; // The current health the player has.
public Slider healthSlider;
public Slider healthSliderEnemy; // Reference to the UI's health bar. // Reference to an image to flash on the screen on being hurt.
public AudioClip deathClip;
public AudioClip deathClipEnemy;
public AudioClip enemyhurt;
public AudioClip playerhurt;
public Image damageImage;
public float flashSpeed = 5f; // The speed the damageImage will fade at.
public Color flashColour = new Color(1f, 0f, 0f, 0.1f);
public Color flashColour2 = new Color(1f, 0f, 0f, 0.1f);
Animator anim; // Reference to the Animator component.
AudioSource playerAudio;
// AudioSource playerAudio2;
bool isDead = false;
bool enemyisDead = false; // Whether the player is dead.
bool damaged;
bool enemydamaged;
public bool CanPause;
public bool win;
public bool lose;
// Use this for initialization
void Awake () {
// Setting up the references.
DontDestroyOnLoad(this);
a = Random.Range(0,9);
CanPause = true;
win = false;
lose = false;
anim = GetComponent <Animator> ();
playerAudio = GetComponent <AudioSource> ();
// playerAudio2 = GetComponent <AudioSource> ();
// playerMovement = GetComponent <PlayerMovement> ();
// playerShooting = GetComponentInChildren <PlayerShooting> ();
// Set the initial health of the player.
currentHealth = startingHealth;
currentHealthEnemy = startingHealth;
}
// Update is called once per frame
void Update () {
if (Input.GetKeyDown (KeyCode.Escape)) {
if(CanPause)
{
Debug.Log("pause");
Time.timeScale=0;
CanPause = false;
}
else
{
Time.timeScale=1;
CanPause=true;
}
}
// If the player has just been damaged...
if(damaged)
{
// ... set the colour of the damageImage to the flash colour.
damageImage.color = flashColour;
}
// Otherwise...
else if(enemydamaged){
damageImage.color = flashColour2;
}
else
{
// ... transition the colour back to clear.
damageImage.color = Color.Lerp (damageImage.color, Color.clear, flashSpeed * Time.deltaTime);
}
// Reset the damaged flag.
damaged = false;
enemydamaged = false;
}
void OnGUI(){
GUI.Window (0, windowRect, WindowFunction, "", typestyle2);
GUI.Label(new Rect(7*Screen.width/16, 50, 100, 20), type2, typestyle4);
if (isDead == true) {
GUI.Label (new Rect (7 * Screen.width / 16, Screen.height/2, 100, 20), "You Lose", typestyle6);
lose = true;
win = false;
Application.LoadLevel(3);
} else if (enemyisDead == true) {
GUI.Label(new Rect(7*Screen.width/16, Screen.height/2, 100, 20), "You Win", typestyle6);
win = true;
lose = false;
Application.LoadLevel(3);
}
}
void WindowFunction(int windowID){
// GUI.SetNextControlName("MyTextField");
typeStr = GUI.TextField(new Rect(Screen.width/4, Screen.height/5 , 7*Screen.width/16 , Screen.height/14), typeStr, 15, typestyle);
if (GUI.Button (new Rect (11*Screen.width/16, Screen.height/5, Screen.width/15, Screen.height/14), "", typestyle3))
// GUI.FocusControl("MyTextField")
{
if(typeStr == type){
iTween.PunchPosition(chara, iTween.Hash("z", 22, "easeType", "easeInOutExpo", "looptype", "none", "delay", 0));
iTween.PunchPosition(enemy2, iTween.Hash("z", -3, "easeType", "easeInOutExpo", "looptype", "none", "delay", 0));
TakeDamageEnemy(20);
typeStr = "";
cek[a]=1;
temp=a;
a = Random.Range(0,9);
type = kamus[a];
type2 = kamus2[a];
while(a==temp || cek[a]==1){
a = Random.Range(0,9);
type = kamus[a];
type2 = kamus2[a];
}
} else{
iTween.PunchPosition(enemy2, iTween.Hash("z", 22, "easeType", "easeInOutExpo", "looptype", "none", "delay", 0));
iTween.PunchPosition(chara, iTween.Hash("z", -3, "easeType", "easeInOutExpo", "looptype", "none", "delay", 0));
cekcek = 1;
if(cekcek == 1){
// iTween.MoveBy(enemy2, iTween.Hash("z", -22, "easeType", "easeInOutExpo", "looptype", "none", "delay", .1));
cekcek = 0;
}
TakeDamage(20);
typeStr = "";
cek[a]=1;
temp=a;
a = Random.Range(0,9);
type = kamus[a];
type2 = kamus2[a];
while(a==temp || cek[a]==1){
a = Random.Range(0,9);
type = kamus[a];
type2 = kamus2[a];
}
}
}
GUI.Label (new Rect (7*Screen.width / 18, 11 * Screen.height / 100, Screen.width / 5, Screen.height / 8), "RULE : Arrange the scrambled words above and click enter (click not press)", typestyle5);
}
public void TakeDamage (int amount)
{
// Set the damaged flag so the screen will flash.
damaged = true;
// Reduce the current health by the damage amount.
currentHealth -= amount;
// Set the health bar's value to the current health.
healthSlider.value = currentHealth;
// Play the hurt sound effect.
playerAudio.Play ();
// If the player has lost all it's health and the death flag hasn't been set yet...
if(currentHealth <= 0 && isDead == false && enemyisDead == false)
{
// ... it should die.
Death ();
}
}
public void TakeDamageEnemy (int amount)
{
// Set the damaged flag so the screen will flash.
enemydamaged = true;
// Reduce the current health by the damage amount.
currentHealthEnemy -= amount;
// Set the health bar's value to the current health.
healthSliderEnemy.value = currentHealthEnemy;
// Play the hurt sound effect.
// playerAudio.clip = enemyhurt;
// playerAudio.Play ();
// playerAudio.clip = playerhurt;
// If the player has lost all it's health and the death flag hasn't been set yet...
if(currentHealthEnemy <= 0 && isDead == false && enemyisDead == false)
{
// ... it should die.
EnemyDeath ();
}
}
void Death ()
{
// Set the death flag so this function won't be called again.
isDead = true;
// Turn off any remaining shooting effects.
// playerShooting.DisableEffects ();
// Tell the animator that the player is dead.
//anim.SetTrigger ("Die");
// Set the audiosource to play the death clip and play it (this will stop the hurt sound from playing).
playerAudio.clip = deathClip;
playerAudio.Play ();
iTween.RotateBy(chara, iTween.Hash("x", -.25, "easeType", "easeInOutBack", "loopType", "once", "delay", .2));
// Turn off the movement and shooting scripts.
// playerMovement.enabled = false;
// playerShooting.enabled = false;
}
void EnemyDeath ()
{
// Set the death flag so this function won't be called again.
enemyisDead = true;
// Turn off any remaining shooting effects.
// playerShooting.DisableEffects ();
// Tell the animator that the player is dead.
//anim.SetTrigger ("Die");
// Set the audiosource to play the death clip and play it (this will stop the hurt sound from playing).
playerAudio.clip = deathClipEnemy;
playerAudio.Play ();
iTween.RotateBy(enemy2, iTween.Hash("x", .5, "easeType", "easeInOutBack", "loopType", "once", "delay", .2));
// Turn off the movement and shooting scripts.
// playerMovement.enabled = false;
// playerShooting.enabled = false;
}
}
====================================================================================
using UnityEngine;
using System.Collections;
public class SpawnCheck : MonoBehaviour {
public bool a;
public bool b;
public GameObject hero;
// public GameObject enem;
public Transform SpawnPoint;
public Transform SpawnPoint2;
public TypeChecker typeChecker;
public GameObject enemy;
// Use this for initialization
void Start () {
// GameObject typebox = GameObject.Find("TypeBox");
typeChecker = GameObject.FindWithTag("boxo").GetComponent<TypeChecker>();
a = typeChecker.win;
b = typeChecker.lose;
}
// Update is called once per frame
void Update () {
if (a == true && b == false) {
Destroy (enemy);
hero.transform.position = SpawnPoint.position;
} else if (b == true && a == false) {
hero.transform.position = SpawnPoint2.position;
}
}
}