Mouse orbit.

I wrote this in C# its a simple mouse orbit, I am lost right now. What I need to do move the camera from its spot to its new target with right click. The only thing is my script wont update until i mouse down (0) So it wont focus on the new target until the camera moves.

If you can help me with this I would apreacheate it.

using UnityEngine;
using System.Collections;

public class MouseOrbit : MonoBehaviour
{
    public KeyCode UserOrbitButton;
    public Transform target;
    public float distance = 10.0f;

    public float xSpeed = 250.0f;
    public float ySpeed = 120.0f;

    public float yMinLimit = -90;
    public float yMaxLimit = 90;

    private float x = 0.0f;
    private float y = 0.0f;

    public Ray ray;

    void Start()
    {
        var angles = transform.eulerAngles;
        x = angles.y;
        y = angles.x;

        // Make the rigid body not change rotation
        if (rigidbody)
            rigidbody.freezeRotation = true;
    }

    void Update()
    {
        if (target && Input.GetMouseButton(0))
        {
            x += Input.GetAxis("Mouse X") * xSpeed * Time.deltaTime;
            y -= Input.GetAxis("Mouse Y") * ySpeed * Time.deltaTime;

            y = ClampAngle(y, yMinLimit, yMaxLimit);

            transform.rotation = Quaternion.Euler(y, x, 0);
            transform.position = (Quaternion.Euler(y, x, 0)) * new Vector3(0.0f, 0.0f, -distance) + target.position;
        }

        if (target && Input.GetMouseButton(1))
        {
            
            ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit hit;
            if (Physics.Raycast(ray, out hit, 2000))
            {
                target = hit.transform;
            }
        }

    }

    static float ClampAngle(float angle, float min, float max)
    {
        if (angle < -360)
        {
            angle += 360;
        }
        if (angle > 360)
        {
            angle -= 360;
        }
        return Mathf.Clamp(angle, min, max);
    }
}

The only thing is my script wont update until i mouse down (0) : Look at your code …

 if (target && Input.GetMouseButton(0))

change this if you want the camera to update all the time.

You may need to organize your logic better too :

void Update()
{
	if (target)
	{
		if (Input.GetMouseButton(1))
		{
			// Get new target
		}
		else
		{
			// Move the camera normally with current target
		}
	}
}

using UnityEngine;
using System.Collections;

public class rotateonmouse : MonoBehaviour {
public float speed = 5.0f;
public Transform target ;
public float Distance = 5.0f;
public float xSpeed = 250.0f;
public float ySpeed = 120.0f;
public float yMinLimit = -20.0f;
public float yMaxLimit = 80.0f;

private float x;
private float y;





 void Awake()
{
    Vector3 angles = transform.eulerAngles;
    x = angles.x;
    y = angles.y;
   
    if(GetComponent<Rigidbody>() != null)
    {
        rigidbody.freezeRotation = true;
    }
}

void LateUpdate()
{
	if (Input.GetMouseButton(1)) {
    transform.LookAt(target);
    transform.RotateAround(target.position, Vector3.up, Input.GetAxis("Mouse X")*speed);
    if(target != null)
    {
        x += (float)(Input.GetAxis("Mouse X") * xSpeed * 0.02f);     
        y -= (float)(Input.GetAxis("Mouse Y") * ySpeed * 0.02f);
       
        y = ClampAngle(y, yMinLimit, yMaxLimit);
       
        Quaternion rotation = Quaternion.Euler(y, x, 0);
        Vector3 position = rotation * (new Vector3(0.0f, 0.0f, -Distance)) + target.position;
       
        transform.rotation = rotation;
        transform.position = position;
    }
	}
}


 private float ClampAngle(float angle, float min, float max)
{
    if(angle < -360)
    {
        angle += 360;
    }
    if(angle > 360)
    {
        angle -= 360;
    }
    return Mathf.Clamp (angle, min, max);
}


// Use this for initialization
void Start () {

}

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

}
}