Storing vs not storing bool during Raycast ?

Doing a raycast and I can’t seem to understand why this works :

 hit.collider.gameObject.GetComponent<Activated>().active = true; 

But this doesn’t:

Key = hit.collider.gameObject.GetComponent<Activated>().active;
Key = true;

The latter just doesn’t change the boolean at all, but the first does.

Because bools are a value type, not a reference type. Read about them here.

In essence, your Key variable stores the value of the Activated’s active variable. It does not store a reference to that variable, though, you’re just copying out the value.

The easiest example of this would be something like this:

bool t = true; //bools are value types
bool v = t; //copies the value of t
v = false;
Debug.Log(t); //prints true

Reference types are different:

class BoolWrapper { //Classes are reference types
    public bool value;
}

//later:
BoolWrapper t = new BoolWrapper();
t.value = true;

BoolWrapper v = t; //copies a reference to t
v.value = false;

Debug.Log(t.value); //prints false

Every primitive type (int, float, double, long, char, bool) and every struct (eg. Vector2, Vector3, Quaternion) is a value type, and works like this. Classes (Like MonoBehaviours) are reference types.

Hope that helps!