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:
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.
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
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
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");
}
}
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");
}
}
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
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