Switching cameras when at a node.

I wrote this to be attached to the “terminal” that switches any two cameras assigned, (Camera 1 being the player camera and Camera2 being an overhead).
it worked well until Unity 5 told me that “.active” is retired, and to use “.SetActive” instead.

var Camera1 : Camera; 
var Camera2 : Camera;
var player: Transform;
var range: float=4f;
var myposition: Transform;



function Start () { 

player = GameObject.FindWithTag("Player").transform; //target the player
Camera1.SetActive = (true); 
Camera2.SetActive = (false); 
}

function Update () { 

	var distance = Vector3.Distance(myposition.position, player.position);
	
	if (distance<=range){
	
		if (Input.GetKeyDown(KeyCode.C)) { 
		// toggle cameras 	
			Camera1.SetActive = !Camera1.SetActive; 
			Camera2.SetActive = !Camera2.SetActive; 
		} 
	}
}

now it doesnt work at all, i was going to add a button option like a prompt, but i need to figure out this first. any help is appreciated.

The Camera1 and Camera2 variables are of type Camera, not gameobject. For Components (like Camera), you can still use .enabled = false. To(De)Activate whole GameObjects, you have to use gameObject.SetActive(false).

1 Answer

1

SetActive is not a flag. It is a method call. You pass true or false to it. You can use the activeSelf flag instead.

Camera1.gameObject.SetActive(!Camera1.activeSelf);
Camera2.gameObject.SetActive(!Camera2.activeSelf);

super thanks, i got it working fine now; is there any benefit to using this vs .enabled?

Setting the game object inactive will affect all child components, so if you have a script that runs on update for instance, it will stop running. Setting the camera's enabled state will only disable the camera. All other components on the game object will continue running. So it really depends on what you need. In many cases, I will use the enabled flag of a Renderer to stop rendering an object, but keep the attached scripts running.