Camera switcher does not work, also check box to activate it doesnt show up.

This is my current code

using UnityEngine;

public class idk : MonoBehaviour
{
    public Camera camera1;
    public Camera camera2;


    void OnTriggerEnter(Collider other)
    {

        if (gameObject.CompareTag("Pickup"))
        {
            camera1.enabled = true;
            camera2.enabled = false;
        }
    }
}

This code doesnt switch the cameras also this happens: 2933946--216991--upload_2017-1-24_20-46-36.png

as you can see, there is no check box to active the script or deactivate it, this might be the problem but I have no idea and if its not could you help me rectify my code or maybe suggest a alternative to the code that does the same thing but using different scripts? Also after the camera switches I would like the scene to switch after a minute but i have no idea to do that either.

hi,

I would not use compare tag. thats just me. try something like this

void OnTriggerEnter(Collider other)
    {
       //debugs are always good when you're learning
        Debug.Log("I hit " + other.gameObject.name + " check it's tag");
        if (other.transform.gameObject.tag == "Pickup")
        {
            camera1.enabled = true;
            camera2.enabled = false;
        }
    }

if the Debug doesn’t print out, then you have gameObject coliiders not seup correctly
sorry if there is code typo’s I free handed the code

here is a working prototype I created for you.

2934076–217007–camSwitch.unitypackage (6.14 KB)

Thanks for responding! I used your code and what happened when I collided with the object with the tag Pickup was that display one stopped rendering and it didnt switch to the other camera

it did turn off the active camera. so that’s good. but it didn’t turn on the second camera.
can you verify on the second camera the the check box is checked. if it’s not checked, then the camera is disabled and the scripted can’t enable it.

Thanks a lot that works! Do you have any idea on how to have the scene switch after a minute? I know how to switch scenes on pressing a button but I dont know the time portion

you just need to start a coroutine

using UnityEngine;
using System.Collections;

public class camSwitch : MonoBehaviour
{
    public Camera camera1;
    public Camera camera2;
    void Start()
    {
        camera1.enabled = false;
        camera2.enabled = true;

        //start a Coroutine here at the start of the game
        StartCoroutine(AutoSwitchCam());
    }
   
    void OnTriggerEnter(Collider other)
    {
        //start a Coroutine when an event happens
        StartCoroutine(AutoSwitchCam());

        Debug.Log("I hit " + other.gameObject.name + " check it's tag");
        if (other.transform.gameObject.tag == "Pickup")
        {
            Debug.Log("mine");
            camera1.enabled = true;
            camera2.enabled = false;
        }
        if (gameObject.CompareTag("Pickup"))
        {
            Debug.Log("his");
            camera1.enabled = true;
            camera2.enabled = false;
        }
    }

    IEnumerator AutoSwitchCam()
    {
        //wait for 60 sec 
        yield return new WaitForSeconds(60);
        //then do this
        camera1.enabled = true;
        camera2.enabled = false;
    }
}

Thanks for all your help and the code above worked! But I have a question about corutines I am trying to use one in my code but I keep on getting an error that says
The name ‘Coroutinetest’ does not exist in the current context
I noticed in your code you didnt declare it or anything so what would I do here this is my code currently:

using UnityEngine;
using System.Collections;
using UnityEngine.SceneManagement;
public class camswitchforopeningscene : MonoBehaviour {
    public Camera camera1;
    public Camera camera2;
    public Camera camera3;
    public Camera camera4;
    public Camera camera5;
    public Camera camera6;
    public Camera camera7;
    public Camera camera8;
    public Camera camera9;
    public Camera camera10;
    public Camera camera11;
    public Camera camera12;
    public Camera camera13;
    public Camera camera14;
    public Camera camera15;
    public Camera camera16;
    public Camera camera17;
    public Camera camera18;
    public Camera camera19;
    public Camera camera20;
    public Camera camera21;
    public Camera camera22;
    public Camera camera23;
    public Camera camera24;
    public Camera camera25;
    public Camera camera26;
    public Camera camera27;
    public Camera camera28;
    public Camera camera29;
    public Camera camera30;
    public Camera gamestartsnow;
  


    // Use this for initialization
    void Start () {
        camera1.enabled = true;
        camera2.enabled = false;
        camera3.enabled = false;
        camera4.enabled = false;
        camera5.enabled = false;
        camera6.enabled = false;
        camera7.enabled = false;
        camera8.enabled = false;
        camera9.enabled = false;
        camera10.enabled = false;
        camera11.enabled = false;
        camera12.enabled = false;
        camera13.enabled = false;
        camera14.enabled = false;
        camera15.enabled = false;
        camera16.enabled = false;
        camera17.enabled = false;
        camera18.enabled = false;
        camera19.enabled = false;
        camera20.enabled = false;
        camera21.enabled = false;
        camera22.enabled = false;
        camera23.enabled = false;
        camera24.enabled = false;
        camera25.enabled = false;
        camera26.enabled = false;
        camera27.enabled = false;
        camera28.enabled = false;
        camera29.enabled = false;
        camera30.enabled = false;
        gamestartsnow.enabled = false;
        StartCoroutine(Coroutinetest());
    }
  
    // Update is called once per frame
    void Update () {
      

    }
}

When I inserted the IEnumerator AutoSwitchCam() into void Update I got a ton of errors so I dont know what im doing wrong.What I want my code to do is start at camera1 and then after a second switch to camera 2 and then after another second switch to camera 3… all the way to camera 30

you don’t a function called Coroutinetest

using UnityEngine;
using System.Collections;
using UnityEngine.SceneManagement;
public class camswitchforopeningscene : MonoBehaviour {
    public Camera camera1;
    public Camera camera2;
    public Camera camera3;
    public Camera camera4;
    public Camera camera5;
    public Camera camera6;
    public Camera camera7;
    public Camera camera8;
    public Camera camera9;
    public Camera camera10;
    public Camera camera11;
    public Camera camera12;
    public Camera camera13;
    public Camera camera14;
    public Camera camera15;
    public Camera camera16;
    public Camera camera17;
    public Camera camera18;
    public Camera camera19;
    public Camera camera20;
    public Camera camera21;
    public Camera camera22;
    public Camera camera23;
    public Camera camera24;
    public Camera camera25;
    public Camera camera26;
    public Camera camera27;
    public Camera camera28;
    public Camera camera29;
    public Camera camera30;
    public Camera gamestartsnow;
  
    // Use this for initialization
    void Start () {
        camera1.enabled = true;
        camera2.enabled = false;
        camera3.enabled = false;
        camera4.enabled = false;
        camera5.enabled = false;
        camera6.enabled = false;
        camera7.enabled = false;
        camera8.enabled = false;
        camera9.enabled = false;
        camera10.enabled = false;
        camera11.enabled = false;
        camera12.enabled = false;
        camera13.enabled = false;
        camera14.enabled = false;
        camera15.enabled = false;
        camera16.enabled = false;
        camera17.enabled = false;
        camera18.enabled = false;
        camera19.enabled = false;
        camera20.enabled = false;
        camera21.enabled = false;
        camera22.enabled = false;
        camera23.enabled = false;
        camera24.enabled = false;
        camera25.enabled = false;
        camera26.enabled = false;
        camera27.enabled = false;
        camera28.enabled = false;
        camera29.enabled = false;
        camera30.enabled = false;
        gamestartsnow.enabled = false;
        StartCoroutine(Coroutinetest());
//StartCoroutine("Coroutinetest");  you could do it this way too
    }
  
    // Update is called once per frame
    void Update () {
      
    }

IEnumerator Coroutinetest() {
Debug.Log("Coroutinetest wait 5");
yield return new WaitForSeconds(5);
Debug.Log("wait completed");
}

}

I put my code like this:

using UnityEngine;
using System.Collections;
using UnityEngine.SceneManagement;
public class camswitchforopeningscene : MonoBehaviour
{
    public Camera camera1;
    public Camera camera2;
    public Camera camera3;
    public Camera camera4;
    public Camera camera5;
    public Camera camera6;
    public Camera camera7;
    public Camera camera8;
    public Camera camera9;
    public Camera camera10;
    public Camera camera11;
    public Camera camera12;
    public Camera camera13;
    public Camera camera14;
    public Camera camera15;
    public Camera camera16;
    public Camera camera17;
    public Camera camera18;
    public Camera camera19;
    public Camera camera20;
    public Camera camera21;
    public Camera camera22;
    public Camera camera23;
    public Camera camera24;
    public Camera camera25;
    public Camera camera26;
    public Camera camera27;
    public Camera camera28;
    public Camera camera29;
    public Camera camera30;
    public Camera gamestartsnow;

    // Use this for initialization
    void Start()
    {
        camera1.enabled = true;
        camera2.enabled = false;
        camera3.enabled = false;
        camera4.enabled = false;
        camera5.enabled = false;
        camera6.enabled = false;
        camera7.enabled = false;
        camera8.enabled = false;
        camera9.enabled = false;
        camera10.enabled = false;
        camera11.enabled = false;
        camera12.enabled = false;
        camera13.enabled = false;
        camera14.enabled = false;
        camera15.enabled = false;
        camera16.enabled = false;
        camera17.enabled = false;
        camera18.enabled = false;
        camera19.enabled = false;
        camera20.enabled = false;
        camera21.enabled = false;
        camera22.enabled = false;
        camera23.enabled = false;
        camera24.enabled = false;
        camera25.enabled = false;
        camera26.enabled = false;
        camera27.enabled = false;
        camera28.enabled = false;
        camera29.enabled = false;
        camera30.enabled = false;
        gamestartsnow.enabled = false;
        StartCoroutine(Coroutinetest());
        //StartCoroutine("Coroutinetest");  you could do it this way too
    }

    // Update is called once per frame
    void Update()
    {

    }

    IEnumerator Coroutinetest()
    {
        Debug.Log("Coroutinetest wait 4");
        yield return new WaitForSeconds(4);
        camera1.enabled = false;
        camera2.enabled = true;
        camera3.enabled = false;
        camera4.enabled = false;
        camera5.enabled = false;
        camera6.enabled = false;
        camera7.enabled = false;
        camera8.enabled = false;
        camera9.enabled = false;
        camera10.enabled = false;
        camera11.enabled = false;
        camera12.enabled = false;
        camera13.enabled = false;
        camera14.enabled = false;
        camera15.enabled = false;
        camera16.enabled = false;
        camera17.enabled = false;
        camera18.enabled = false;
        camera19.enabled = false;
        camera20.enabled = false;
        camera21.enabled = false;
        camera22.enabled = false;
        camera23.enabled = false;
        camera24.enabled = false;
        camera25.enabled = false;
        camera26.enabled = false;
        camera27.enabled = false;
        camera28.enabled = false;
        camera29.enabled = false;
        camera30.enabled = false;
        gamestartsnow.enabled = false;
        Debug.Log("wait completed");
    }

}

Basically camera 2 would become active after 4 seconds but the cameras never switched and they are all active

FYI, you should really change this to an array of cameras and then loop though the array to turn them all off

this looks much better to me

using UnityEngine;
using System.Collections;
using UnityEngine.SceneManagement;

public class camswitchforopeningscene : MonoBehaviour {
    public Camera[] cameraList; //add the camera via the inspector

    public Camera gamestartsnow;
    // Use this for initialization
    void Start () {
   
    for(int i = 0; i < cameraList.Length; i++)
        {
            if(i == 0)
            {
            //enable cam 1
                cameraList[i].enabled = true;
            }else
            {
            //all other cam
                cameraList[i].enabled = false;
            }
        }
        gamestartsnow.enabled = false;
        StartCoroutine(Coroutinetest());
    }
    // Update is called once per frame
    void Update () {
    
    }
    IEnumerator Coroutinetest()
    {
        Debug.Log("Coroutinetest wait 5");
        yield return new WaitForSeconds(5);
        Debug.Log("wait completed");
    }
}

ignore the last post, i’ll fix it with your last comment

alright

updated code,
but if you’re still having trouble, this code will not fix anything. it’s the same functionality with better code practices.
Did you ever verify that it switches with just 2 camera?

using UnityEngine;
using System.Collections;
using UnityEngine.SceneManagement;

public class camswitchforopeningscene : MonoBehaviour {
    public Camera[] cameraList; //add the camera via the inspector

    public Camera gamestartsnow;
    // Use this for initialization
    void Start () {
   
    for(int i = 0; i < cameraList.Length; i++)
        {
            if(i == 0)
            {
            //enable cam 0
                cameraList[i].enabled = true;
            }else
            {
            //all other cam
                cameraList[i].enabled = false;
            }
        }
        gamestartsnow.enabled = false;
        StartCoroutine(Coroutinetest());
    }
    // Update is called once per frame
    void Update () {
    
    }
    IEnumerator Coroutinetest()
    {
        Debug.Log("Coroutinetest wait 4");
        yield return new WaitForSeconds(4);
        for(int i = 0; i < cameraList.Length; i++)
        {
            if(i == 1)
            {
            //enable cam 1
                cameraList[i].enabled = true;
            }else
            {
            //all other cam
                cameraList[i].enabled = false;
            }
        }
        gamestartsnow.enabled = true;
        Debug.Log("wait completed");
    }
}

if it doesn’t work. export your scene as a unity package. I’ll take a look at the scene and see if I find out why it’s not working.
any errors? any Debug statements?

When I used the code above what happened was that I tried it with 2 cameras and it didnt switch within 4 seconds what it did was, uncheck the camera part in my second camera because of the start code and then it rechecked it after 4 seconds but the display was still using the first camera

This is the scene

2937927–217364–exported.unitypackage (8.36 KB)

wow, i’m ready to check it right this min, but you’ll have your answer tonight. thanks

Ok np

I wanted to add something to the code, I would like it so that once it cycles through all of the cameras (15, changed the amount) it switched the scene to scene 0