activeInHierarchy code not being reflected correctly in Editor although debugging shows correct code

This will be a long post, I apologize for the length.

I’m running into a problem where the Editor doesn’t seem to be reflecting the code properly. There’s two important scripts interacting that I’ll break down here:

My main game control script handles switching between the two main game states Orientation A and Orientation B. It switches back and forth on a button press depending on if the player’s main character is active. If it is, it’ll switch depending on the current state and if it isn’t it’ll reset back to the original state.

public class GameControl : MonoBehaviour {

    public GameObject OrientationA;
    public GameObject OrientationB;
    public GameObject CombinedOrient;
    public GameObject player;     //the player's main character
    private GameObject player5;   //another character in the scene
    public GameObject respawnPoint;
    public bool switchPressed;

public void Start () {
        OrientationA.SetActive(true);
        OrientationB.SetActive(false);
        CombinedOrient.SetActive(false);
        player5 = GameObject.FindWithTag("Player5");
        player.SetActive(true);
        player.transform.position = respawnPoint.transform.position;
        if (player5 != null)       //some scenes won't have this character in them
        {
            player5.SetActive(true);
        }
        switchPressed = false;
	}
	
	void Update () {

        if (Input.GetButtonDown("Fire3")) 
        {
            Debug.Log("Player is " + player.activeSelf);
            if (player.activeSelf == true)
            {
                Debug.Log("Switching");
                switchPressed = !switchPressed;
                SwitchOrient();
            }
            else if (player.activeSelf == false)
            {
                Debug.Log("Resetting");
                Start();
            } 
        }
    }

    void SwitchOrient()
    {
        
        if (switchPressed == false)   //B to A
        {
            Debug.Log("Switching B to A");
            OrientationA.SetActive(true);
            Debug.Log("A is " + OrientationA.activeInHierarchy);
            OrientationB.SetActive(false);
            Debug.Log("B is " + OrientationB.activeInHierarchy);
            CombinedOrient.SetActive(false);
            Debug.Log("Combined is " + CombinedOrient.activeInHierarchy);
        }
        else if (switchPressed == true)     //A to B
        {
            Debug.Log("Switching A to B");
            OrientationB.SetActive(true);
            Debug.Log("B is " + OrientationB.activeInHierarchy);
            OrientationA.SetActive(false);
            Debug.Log("A is " + OrientationA.activeInHierarchy);
            CombinedOrient.SetActive(false);
            Debug.Log("Combined is " + CombinedOrient.activeInHierarchy);
        }
    }

All of the extra nonsense in there about “player5” and Combined Orient and such has to do with the second script. This is attached to another character in the scene and upon a button press it will “combine” Orientation A and B, which is really just activating the third state, CombinedOrient. Everything about this script works perfectly.

public class PlayerCombine : MonoBehaviour {

    public bool combine;
    public float combinedTime = 5.0f;
    private float separate = 0;
    public GameObject GameController;
    private GameControl control;
    public GameObject MainPlayer;

    void Start () {
        control = GameController.GetComponent<GameControl>();
        combine = false;
	}
	
	void Update () {

        if (Input.GetButtonDown("Fire4") && combine == false)
        {
            combine = true;
            Debug.Log("Combining");
        }

        if (combine == true && control.OrientationA.activeSelf == true && MainPlayer.activeSelf == true)
        {
            control.OrientationA.SetActive(false);
            control.OrientationB.SetActive(false);
            control.CombinedOrient.SetActive(true);
        }
        else if (combine == false && control.CombinedOrient == true && MainPlayer.activeSelf == true)
        {
            control.OrientationA.SetActive(true);
            control.OrientationB.SetActive(false);
            control.CombinedOrient.SetActive(false);
        }

        if (combine == true)
        {
            separate += Time.deltaTime;
            if (separate >= combinedTime)
            {
                combine = false;
                separate = 0;
            }
        }


	}
}

The problem that’s arising is that when the main character is in a position in the scene where they will remain active after switching game states, the states do not switch…in the Editor. They do however switch in code which I can verify by having all of the Debug code in there. The states also switch if the player will deactivate after switching states. Essentially if the player is supposed to survive the switch, the code will run correctly but the Editor does not switch the states. If the player will die when switched, the code and Editor switch the states as planned.

Example:
The game is in Orientation A and the player is in a safe spot where they’ll survive when they switch.
Player presses the button to switch from A to B. The code runs and this is the result:

The most annoying part is that when I remove Player5 from the scene, therefore eliminating the possibility of using the Combined game state, there are no problems with switching between A and B. So I’m not sure if it has something to do with how these two scripts are communicating with each other or if it’s something to do with the Editor.

Hopefully all of this makes sense and isn’t a big mess to try to understand. Any help on the matter is greatly appreciated, I’ve been trying to work this out for a week! D,x I’m hoping I’m just overthinking everything and someone will figure it out easily :smiley:

I’m still not able to figure this out and could really use any help that anyone has.

Is there anything I can add to make this easier to solve?