MouseOrbit script


I am using the standard MouseOrbit script in my game. When the player fails the level, the player respawns in the starting position, but the camera does not go back to the original position/rotation.

I have tried to archive it by doing the following:

var target : Transform;
var distance = 10.0;

var xSpeed = 250.0;
var ySpeed = 120.0;

var yMinLimit = -20;
var yMaxLimit = 80;

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

private var startPos : Vector3;
private var startRot;
private var canMove : boolean = true;

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

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

	// Make the rigid body not change rotation
   	if (rigidbody)
		rigidbody.freezeRotation = true;
	startPos = this.transform.position;
	startRot = this.transform.rotation;

function LateUpdate () 
	if (canMove)
		if (target) 
	        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;

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);

function Restart()
	canMove = false;
	this.transform.position = startPos;
	transform.rotation = startRot;
	canMove = true;

However, it doesn’t working. I call the Restart function from a different script, and it is calling it succesfully.

Any ideas?

I’m afraid it’s not a problem with the camera script! It’s to do with an interaction between the mouse orbit script and the character’s ‘respawn’ script. Can you edit your post above, remove all the bits which are from the original mouse orbit (since we all know how that goes) and add in exactly how the respawning works? As far as I can tell, the problem is that your ‘character’ get destroyed (not moved), and so the transform ‘target’ on the mouse orbit script becomes null, preventing the script from working properly.

In fact, if that bit was working, I suspect that what you are doing in the ‘Restart’ function would be completely unnecessary anyway! (except for the ‘canMove’ bit, I guess, although you are assigning it ‘false’ and then ‘true’ immediately afterwards, which does nothing - there is no point in that function which can break out of scope, so there’s no need to lock movement in there. The ‘canMove’ bool does absolutely nothing.)