Camera orbit with mouse orbit - limits

Hi folks!

I'm trying to make a camera rotation system to rotate around a sphere with the mouse, and I started with the mouse orbit script found in the stardard assets.

The limitation of this script is than when I'm on the top of the sphere and move left and right, the camera doesn't shift but spin around itself.

I need a system that maintain the same behaviour on every position.

Any ideas?

Tnx a lot :)

using UnityEngine;
using UnityEngine;
using System.Collections;

`````` //[AddComponentMenu("Camera-Control/Mouse drag Orbit with zoom")]
public class rotateonmouse : MonoBehaviour
{
public Transform target;
public float distance = 5.0f;
public float xSpeed = 120.0f;
public float ySpeed = 120.0f;

public float yMinLimit = -20f;
public float yMaxLimit = 80f;

public float distanceMin = .5f;
public float distanceMax = 15f;

public float smoothTime = 2f;

float rotationYAxis = 0.0f;
float rotationXAxis = 0.0f;

float velocityX = 0.0f;
float velocityY = 0.0f;

// Use this for initialization
void Start()
{
Vector3 angles = transform.eulerAngles;
rotationYAxis = angles.y;
rotationXAxis = angles.x;

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

void LateUpdate()
{
if (target)
{
if (Input.GetMouseButton(1))
{
velocityX += xSpeed * Input.GetAxis("Mouse X") * 0.02f;
velocityY += ySpeed * Input.GetAxis("Mouse Y") * 0.02f;
}

rotationYAxis += velocityX;
rotationXAxis -= velocityY;

rotationXAxis = ClampAngle(rotationXAxis, yMinLimit, yMaxLimit);

Quaternion fromRotation = Quaternion.Euler(transform.rotation.eulerAngles.x, transform.rotation.eulerAngles.y, 0);
Quaternion toRotation = Quaternion.Euler(rotationXAxis, rotationYAxis, 0);
Quaternion rotation = toRotation;

Vector3 negDistance = new Vector3(0.0f, 0.0f, -distance);
Vector3 position = rotation * negDistance + target.position;

transform.rotation = rotation;
transform.position = position;

velocityX = Mathf.Lerp(velocityX, 0, Time.deltaTime * smoothTime);
velocityY = Mathf.Lerp(velocityY, 0, Time.deltaTime * smoothTime);
}

}

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