rotation problem -

I’m using the following camera script:

var toolbarInt = 0;
var toolbarStrings : String[] = ["Select","Rotate", "Zoom", "Pan"];

function OnGUI () {
	toolbarInt = GUI.Toolbar (Rect (20, 165, 180, 30), toolbarInt, toolbarStrings);
}

var target : Transform;
var distance = 10.0;
var xSpeed = 250.0;
var ySpeed = 120.0;
var yMinLimit = -20;
var yMaxLimit = 80;
var zoomRate = 2;


private var x = 0.0;
private var y = 0.0;

@script AddComponentMenu("Camera-Control/Mouse Orbit")

function Start () {
    var angles = transform.eulerAngles;
    x = angles.y;
    y = angles.x;
    
     if (rigidbody)
     rigidbody.freezeRotation = true; 
}
   
var mover : Transform;
function LateUpdate () {
    if (toolbarStrings[toolbarInt] == "Select") {return;}
   
    if (toolbarStrings[toolbarInt] == "Rotate") {
        x += Input.GetAxis("Mouse X") * xSpeed * 0.02;
        y -= Input.GetAxis("Mouse Y") * ySpeed * 0.02;
    }
       
    if (toolbarStrings[toolbarInt] == "Zoom") {
    distance += -Input.GetAxis("Mouse ScrollWheel") * zoomRate * Mathf.Abs(distance);   
    y = ClampAngle(y, yMinLimit, yMaxLimit);
    }
    
    var rotation = Quaternion.Euler(y, x, 0);
    var position = rotation * Vector3(0.0, 0.0, -distance) + target.position;
   
    if (toolbarStrings[toolbarInt] == "Pan")
    transform.rotation = rotation;
    transform.position = position + mover.position;   
}

static function ClampAngle (angle : float, min : float, max : float) {
   if (angle < -360)
      angle += 360;
   if (angle > 360)
      angle -= 360;

along with this script attached to my Game Object:

var moveSpeed : float = 1;
var cam : Transform;

function Update () {
    if (Input.GetMouseButton(1)) {
        transform.rotation = cam.rotation;
        transform.Translate(Vector3.right * -Input.GetAxis("Mouse X") * moveSpeed);
        transform.Translate(transform.up * -Input.GetAxis("Mouse Y") * moveSpeed, Space.World);
    }
}

but can’t get the rotation (orbit) to work right. The camera won’t rotate around the object, rather seems to pan (which I’ve reserved for the Pan GUI button).

Any ideas on what I’ve left out here?

Thanks.

never mind, I got it:

var toolbarInt = 0;
var toolbarStrings : String[] = ["Select","Rotate", "Zoom", "Pan"];

function OnGUI () {
	toolbarInt = GUI.Toolbar (Rect (20, 165, 180, 30), toolbarInt, toolbarStrings);
}

var target : Transform;
var distance = 10.0;
var xSpeed = 250.0;
var ySpeed = 120.0;
var yMinLimit = -20;
var yMaxLimit = 80;
var zoomRate = 2;


private var x = 0.0;
private var y = 0.0;

@script AddComponentMenu("Camera-Control/Mouse Orbit")

function Start () {
    var angles = transform.eulerAngles;
    x = angles.y;
    y = angles.x;
    
     if (rigidbody)
     rigidbody.freezeRotation = true; 
}
   
var mover : Transform;
function LateUpdate () {
    if (toolbarStrings[toolbarInt] == "Select") {return;}
   
    if (toolbarStrings[toolbarInt] == "Rotate") {
    	
        x += Input.GetAxis("Mouse X") * xSpeed * 0.02;
        y -= Input.GetAxis("Mouse Y") * ySpeed * 0.02;
        
        y = ClampAngle(y, yMinLimit, yMaxLimit);
        
    	var rotation = Quaternion.Euler(y, x, 0);
    	var position = rotation * Vector3(0.0, 0.0, -distance) + target.position;
    	
        transform.rotation = rotation;
    	transform.position = position; 
    }
       
    if (toolbarStrings[toolbarInt] == "Zoom") {
    	
    	x += Input.GetAxis("Mouse X") * xSpeed * 0.02;
        y -= Input.GetAxis("Mouse Y") * ySpeed * 0.02;
    
    	distance += -Input.GetAxis("Mouse ScrollWheel") * zoomRate * Mathf.Abs(distance);
    	   
    	position = rotation * Vector3(0.0, 0.0, -distance) + target.position;
    	transform.position = position;
    	 
	}
	   
    if (toolbarStrings[toolbarInt] == "Pan") {
    	
    	x += Input.GetAxis("Mouse X") * xSpeed * 0.02;
        y -= Input.GetAxis("Mouse Y") * ySpeed * 0.02;
    
    	position = rotation * Vector3(0.0, 0.0, -distance) + target.position;
    	transform.position = position + mover.position; 
    }  
}

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

now I’m trying to figure out how to keep the position of the camera from changing every time I switch to a new GUI button. any suggestions would be welcome.