How to change Booleans from other scripts?
I'm creating doors similar to those in portal but resetting objects instead, the problem is i can't change Booleans from other scripts, I've tried everything I can think of but nothing seems to work, Any help is appreciated.
Here's my scripts:
public float distanceToSee;
public bool keyCardElevator = false;
public bool keyCardEDoor = false;
bool warehouseConsole = false;
bool roomConsole = false;
bool hallwayConsole = false;
RaycastHit whatIHit;
GameObject theKey;
// Use this for initialization
void Start () {
keyCardElevator = false;
theKey = GameObject.Find("Key_Card");
}
// Update is called once per frame
void Update ()
{
Debug.DrawRay(this.transform.position, this.transform.forward * distanceToSee, Color.magenta);
if(Physics.Raycast(this.transform.position, this.transform.forward, out whatIHit, distanceToSee))
{
if (whatIHit.collider.gameObject.tag == "HoloDoor")
{
keyCardElevator = false;
keyCardEDoor = true;
}
if(Input.GetKeyDown (KeyCode.E))
{
if (keyCardEDoor == true)
{
theKey.transform.Translate(-20, -40, Time.deltaTime);
theKey.transform.Translate(-50, Time.deltaTime, -20, Space.World);
}
if (whatIHit.collider.gameObject.tag == "KeyCards")
{
Debug.Log("I picked up a " + whatIHit.collider.gameObject.name);
if (whatIHit.collider.gameObject.GetComponent<KeyCards>().whatKeyAmI == KeyCards.Keycards.correctKeyLower)
{
keyCardElevator = true;
keyCardEDoor = false;
if(keyCardElevator == true)
{
theKey.transform.Translate(20, 40, Time.deltaTime);
theKey.transform.Translate(50, Time.deltaTime, 20, Space.World);
}
}
}
}
And the script for the door:
public class HoloDoor : MonoBehaviour
{
GameObject thePlayer;
PlayerRaycasting playerScript;
void Start()
{
thePlayer = GameObject.Find("FPSController");
playerScript = thePlayer.GetComponent<PlayerRaycasting>();
playerScript.keyCardEDoor = false;
}
void OnTriggerEnter(Collider other)
{
if (other.gameObject.tag == "Player")
{
if (playerScript.keyCardElevator == true)
{
playerScript.keyCardElevator = false;
playerScript.keyCardEDoor = true;
Debug.Log("Die!!!!");
}
}
}
}
Answer by qpJaKeWaGGqp · Jan 12, 2018 at 05:06 AM
Try using the 'static' keyword.
public class ParentScript : MonoBehaviour {
public static bool changedBool;
// Use this for initialization
void Start () {
changedBool = true;
}
}
public class FriendScript : MonoBehaviour {
// Update is called once per frame
void Update () {
if (ParentScript.changedBool == true)
{
ParentScript.changedBool = false;
Debug.Log(ParentScript.changedBool);
}
}
}
If you run these two scripts, you will notice the console prints out false, which as you can see by the ParentScript, that it was initially set to true but changed to false by the FriendScript. A plus about using the static keyword is that it usually saves a bit a typing since you do not need any 'GetComponents' or Instances!
Your answer
Follow this Question
Related Questions
How to change the Bool for only a single prefab GameObject creating with Instantiate? 2 Answers
Script Variable not transfering 0 Answers
boolean not switching to false. 0 Answers
How do I Effect a whole Array of GameObjects' Scripted Boolean? 0 Answers
How to enable/disable an Icon depending on the bool state of a toggle. 0 Answers