- Home /
Question by
d25-green · Apr 13, 2015 at 09:34 PM ·
c#cameramultiple cameras
Stop a secondary Camera from moving until activated. [C#]
Hi there,
I'm trying to add a second camera into a level that has a different viewpoint than the main camera. What I want to happen is that when the player reaches a certain area, it will switch from the main camera to the second.
I have the collider set up and working, but my problem is that the second camera is moving throughout the level, even though it is not active.
Is there a way to stop the second camera from moving until it is active? Also, how would I be able to have a smooth transition between the two?
Collider Script
using UnityEngine;
using System.Collections;
public class CameraCollision : MonoBehaviour {
public Camera camera1;
public Camera camera2;
// Use this for initialization
void Start () {
camera1.enabled = true;
camera2.enabled = false;
}
void OnTriggerEnter(Collider other)
{
if(other.gameObject.tag == "Player")
{
camera1.enabled = false;
camera2.enabled = true;
}
}
void OnTriggerExit(Collider other)
{
if(other.gameObject.tag == "Player")
{
camera1.enabled = true;
camera2.enabled = false;
}
}
}
Camera1 Script
using UnityEngine;
using System.Collections;
public class FollowCamera : MonoBehaviour
{
public GameObject target;
public float damping = 1;
Vector3 offset;
// Use this for initialization
void Start ()
{
offset = target.transform.position - transform.position;
}
// Update is called once per frame
void LateUpdate ()
{
float currentAngle = transform.eulerAngles.y;
float desiredAngle = target.transform.eulerAngles.y;
float angle = Mathf.LerpAngle(currentAngle, desiredAngle, Time.deltaTime * damping);
Quaternion rotation = Quaternion.Euler(0, desiredAngle, 0);
transform.position = target.transform.position - (rotation * offset);
transform.LookAt(target.transform);
}
}
Camera2 Script
using UnityEngine;
using System.Collections;
public class ColumnCamera : MonoBehaviour
{
public GameObject target;
public float damping = 1;
Vector3 offset;
// Use this for initialization
void Start ()
{
offset = transform.position - target.transform.position;
}
// Update is called once per frame
void LateUpdate ()
{
Vector3 desiredPosition = target.transform.position + offset;
Vector3 position = Vector3.Lerp(transform.position, desiredPosition, Time.deltaTime * damping);
transform.position = desiredPosition;
transform.LookAt(target.transform.position);
}
}
Comment
Your answer